Следует ли поощрять явное кодирование и кодирование / декодирование в качестве «наилучшей практики» в Perl? - PullRequest
5 голосов
/ 04 декабря 2009

Раньше у меня было только смутное представление о проблемах кодировки символов, но ответы на вопрос сегодня заставили меня задуматься об этом. Следующее обеспечило больше пищи для размышлений:

perlunitut - учебник по Perl Unicode

perlunifaq - FAQ по Perl Unicode

Абсолютный минимум каждый разработчик программного обеспечения Абсолютно, положительно должен знать о Unicode и наборах символов (без оправданий!)

Единственное место, где я видел упоминание о кодировке символов (например, use utf8; для большинства из нас) нашего исходного кода в качестве "наилучшей практики", было в ответах на ранее упомянутый вопрос .

Кроме того, perlunitut упоминает, что мы должны use Encode qw{encode decode}; в нашем "стандартном заголовке" в программах Perl. Таким образом, кажется, что другой «наилучшей практикой» должно быть декодирование всего ввода и кодирование всего вывода.

Что ты думаешь?

1 Ответ

14 голосов
/ 04 декабря 2009

use utf8 на самом деле не имеет к этому никакого отношения - почти никто не использует юникод-идентификаторы, и программа может легко распознавать кодировку, даже не включая строковые литералы UTF-8 в код.

Но да, лучшая из известных мне мудростей для работы с кодировками такова:

  • Всегда знайте, откуда поступают ваши данные и как они форматируются, и декодируйте их как можно скорее (если только они не предназначены для обработки в байтах).
  • Всегда понимайте формат данных, в который вы пишете, или что ожидает ваш клиент, и кодируйте на выходе (если ваши данные уже не являются байтами).
  • И когда дело доходит до текста, всегда работайте со строками символов во "внутреннем пространстве" вашей программы.

Само существование миллиона различных наборов символов и миллиона различных кодировок должно быть как можно более подробным описанием интерфейса . Есть некоторые вещи, которые вы все равно должны иметь в виду - например, различные параметры сортировки для разных языков - но в любом случае это идеальный вариант, и следование ему, насколько это возможно, должно значительно уменьшить количество «проблем кодирования» в вашем коде.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...