понедельник, 20 октября 2008 г.

UTF-8 и Perl

Есть работающая программа. Долгое время она писала в журналы: Wide character in print at module.pl line NNN. Если верить ошибке, то на выходе должна была быть смесь UTF-8 и ISO-8859-5, но реально был только ISO. При просмотре кода оказалось, что строки, распечатываемые в print содержат UTF-8, а STDOUT переопределён и перекодируется с помощью iconv:
open(STDOUT, "| iconv -f $codexml -t $codepage");
select(STDOUT); $| = 1;

Убрал переопределение STDOUT, добавил рекурсивное перекодирование структуры - теперь можно наслаждаться пустыми логами.

P.S. Если из строки нужно убрать лишние (или служебные) символы вывод которых вызывает предупреждение "Wide character in print", то для этих целей можно использовать:
$value =~ s/[^[:ascii:]]+//g;

Комментариев нет:

Отправить комментарий