2013-03-05 2 views
3

У меня проблема с моими скриптами на Perl. В UNIX-подобных системах он печатает все символы Unicode, например ä, на консоль. В командной строке Windows символы разбиты на бессмысленные глифы. Есть ли простой способ избежать этого? Я использую use utf8;.Perl на Windows: проблемы с кодировкой

Заранее спасибо.

+0

Вы проверили ответы этого вопроса: http://stackoverflow.com/questions/627661/how-can-i-output-utf-8-from-perl –

+0

Другой вопрос учитывая диспетчеризацию юникода в консоли Windows: http://stackoverflow.com/questions/388490/unicode-characters-in-windows-command-line-how –

+0

Ненависть к ненависти - ненавижу эту 'utf8' в прекрасном' Perl' – gaussblurinc

ответ

11

use utf8; просто сообщает Perl, что ваш источник закодирован с использованием UTF-8.

Он также не работает на unix. Есть несколько строк, которые не будут печататься правильно (print chr(0xE9);), и большинство из них будут печатать предупреждение «Широкий символ» (print chr(0x2660);). Вам необходимо декодировать ваши входы и кодировать ваши выходы.

В системах Unix, это usuaully

use open ':std', ':encoding(UTF-8)'; 

В системе Windows, вы должны будете использовать chcp, чтобы найти страницу символов в консоли. (. 437 для меня)

use open ':std', ':encoding(cp437)'; # Encoding used by console 
use open IO => ':encoding(cp1252)'; # Encoding used by files 
+0

Пробуя это в Windows 7 cmd.exe, это порождает ошибки. 'Нечетное число элементов в хэш-присваивании в C: /strawberry/perl/lib/encoding.pm строка 120. Кодирование: Неизвестная кодировка ': std' в C: \ Users \ Peter \ perl \ foo.pl строка 9.' (то же самое для ': encoding ...' и 'IO => ..'). Наконец, мне пришлось сменить шрифт cmd.exe на консоль Lucida, chcp 1252, а затем использовать 'use encoding 'cp1252';' внутри скрипта. – TLP

+0

@TLP, исправлено. Должно быть 'open', а не' encoding'. Никогда не используйте 'encoding'. – ikegami

+1

+1 Это работает. Ничего себе, столько проблем с печатными персонажами. – TLP

Смежные вопросы