2010-06-06 2 views
5

Ho uno script perl che stampa alcune informazioni sulla console in russo. Lo script verrà eseguito su diversi sistemi operativi, pertanto la codifica della console può essere cp866, koi8-r, utf-8 o altri. C'è un modo portatile per rilevare la codifica della console in modo da poter impostare STDOUT di conseguenza in modo che il testo sia stampato correttamente?Rilevamento automatico della console in perl

risposta

2

Se sei su Windows, c'è Win32::Codepage.

+0

Lo script verrà eseguito su qualsiasi sistema operativo – n0rd

+0

Su di una console di Windows, questa è la soluzione migliore che io conosca. Non conosco un modo per rilevare la codifica dell'output su Linux o altri sistemi simili a Unix. Di solito setto il terminale sulla codifica UTF-8 e lo uso per Perl. Su Windows, per quanto ne so non è possibile impostare la codepage della finestra del terminale. Per quanto riguarda una soluzione portatile, sarebbe grandioso, ma non so se esiste. –

+0

Nella codifica della console Windows è impostato con il programma 'chcp', suppongo che ci sia anche una soluzione programmatica. Ad ogni modo, forzare alcune particolari codifiche della console non è una soluzione. – n0rd

1
+0

Non funziona su Windows. Almeno non sono riuscito a farlo funzionare. Credo che si basi sulle variabili di ambiente per rilevare la codifica della console che di solito non è impostata su Windows. – n0rd

1
+0

Questo è interessante: 'Term :: Encoding :: get_encoding()' restituisce 'utf-8' sul mio Windows Server 2012 usando cygwin perl. 'chcp' mostra che la console è effettivamente in' cp-437', ma gli script perl sono in grado di stampare caratteri non latini. Quindi sono confuso ora. – n0rd

+0

Scopri perché l'output del comando 'chcp' e dell'API [GetConsoleOutputCP] (http://msdn.microsoft.com/en-us/library/windows/desktop/ms683169 (v = vs.85) .aspx) chiamata in disaccordo. Prova con un Perl nativo invece di Cygwin. – daxim