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
Se sei su Windows, c'è Win32::Codepage.
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
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
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
Lo script verrà eseguito su qualsiasi sistema operativo – n0rd
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. –
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