суббота, 16 января 2016 г.

Еще раз про юникод в perl и злосчастный Wide character in subroutine entry

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

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

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

Если Вы нашли ошибку у автора, у Вас есть вопрос или просто хотите поделиться чем-то полезным, то пишите - не стесняйтесь..