Многие perl скриптеры порой впадают в ступор от
Wide character in subroutine entry
.
Хорошо, если знают хотя бы примерно о том, что такое
Wide character
, хуже , если нет.
Хорошо, если начинают копать матчасть и разбираются с в общем-то нехитрой работой с юникодом в perl, хуже, если начинают наобум тыкать в
use utf8
,
encode/decode
... На выходе порой может получиться забавная инструкция с кучей вызовов на всякий случай.. она может даже будет работать, но подобный модуль будет доставлять всем вокруг головную боль.
Итак, все просто:
1. если имеешь дело с данными из внешнего источника - проверяй их перед употреблением на
is_utf8
и дальше действуй по обстоятельствам: либо кодируй, либо декодируй - но осознанно.
2. если имеешь дело со строковыми константами , то достаточно сказать
use utf8
, чтобы для интерпретатора все константы скрипта были помечены не как последовательность байт, а именно как юникод-строка.
3. чтобы перевести в последовательность байт из юникода - decode
4. чтобы перевести из последовательности байт в юникод - encode
помните о том, кто будет вас дергать и описывайте свои входы и выходы а также свою политику относительно внутренней работы со строками ( работаете как с последовательностю байт или как со юникод-строками ) и все будет хорошо.
Комментариев нет:
Отправить комментарий
Если Вы нашли ошибку у автора, у Вас есть вопрос или просто хотите поделиться чем-то полезным, то пишите - не стесняйтесь..