2010-06-06 4 views
5

J'ai un script Perl qui imprime des informations à la console en russe. Le script sera exécuté sur plusieurs systèmes d'exploitation, de sorte que l'encodage de la console peut être cp866, koi8-r, utf-8 ou un autre. Existe-t-il un moyen portable de détecter l'encodage de la console afin que je puisse configurer STDOUT en conséquence pour que le texte soit imprimé correctement?Encodage de sortie de la console Autodetect en perl

Répondre

2

Si vous utilisez Windows, il y a Win32::Codepage.

+0

Le script sera exécuté sur tout système d'exploitation – n0rd

+0

Sur une console Windows, c'est la meilleure solution que je connaisse. Je ne connais pas de moyen de détecter le codage de sortie sur Linux ou d'autres systèmes de type Unix. Je règle généralement le terminal au codage UTF-8 et l'utilise pour Perl. Sur Windows, autant que je sache, il n'est pas possible de définir la page de code de la fenêtre du terminal. Quant à une solution portable, ce serait génial mais je ne sais pas si ça existe. –

+0

Sur l'encodage de la console Windows est défini avec le programme 'chcp', je suppose qu'il existe également une solution de programmation. Quoi qu'il en soit, forcer un codage de console particulier n'est pas une solution. – n0rd

1
+0

Ne fonctionne pas sur Windows. Au moins, je n'ai pas réussi à le faire fonctionner. Je crois qu'il s'appuie sur des variables d'environnement pour détecter l'encodage de la console qui ne sont généralement pas définies sur Windows. – n0rd

1
+0

C'est intéressant: 'Term :: Encoding :: get_encoding()' renvoie 'utf-8' sur mon Windows Server 2012 en utilisant cygwin perl. 'chcp' montre que la console est en fait' cp-437', mais les scripts perl sont capables d'imprimer des caractères non latins. Donc je suis confus maintenant. – n0rd

+0

Découvrez pourquoi la sortie de la commande 'chcp' et l'API [GetConsoleOutputCP] (http://msdn.microsoft.com/en-us/library/windows/desktop/ms683169 (v = vs.85) .aspx) API appelez en désaccord. Essayez avec un Perl natif au lieu de Cygwin. – daxim

Questions connexes