LINUX.ORG.RU

больная тема: perl и utf-8

 ,


2

2

Сабж: http://habrahabr.ru/post/190584/

Мопед не мой. ИМХО, на рисунке флаги нужно было пониже поместить.

Для труЪ:

1. Не пользуйтесь (если вы точно не знаете, что делаете) следующими функциями: utf8::is_utf8, Encode::_utf8_on, Encode::_utf8_off, и всеми функциями из модуля bytes (документация ко всем этим функциям не рекомендует их использование, кроме как для отладки)

2. Пользуйтесь utf8::upgrade, utf8::downgrade, всякий раз, когда этого требует спецификация Perl

3. Для конвертации из символов в байты пользуйтесь Encode::encode, Encode::decode

3. Если используете чужой код, нарушающий эти правила, проверьте его на наличие багов, применяйте workaroundы.

4. При работе с именами файлов, либо придётся использовать wrapper над всеми функциями, либо, с помощью тестов убедиться, что внутреннее представление имён файлов не меняется в процессе работы кода.

★★★★★

Последнее исправление: cetjs2 (всего исправлений: 2)

Ну, прям срыв покрывал. Все же расписано в perldoc.

gh0stwizard ★★★★★
()

Слудеющий пример выдаёт warning Wide characters in print только если мы печатает $s2

use strict;
use warnings;
use utf8;
my $s1 = "ß";
my $s2 = "тест";
my $s = $ARGV[0] ? $s1 : $s2;
print $s;

Пользуйтесь use common::sense и не будет никаких проблем.

gh0stwizard ★★★★★
()
Ответ на: комментарий от gh0stwizard

Ну, прям срыв покрывал. Все же расписано в perldoc.

Да, написано, иначе это был бы баг и можно было зарепортить что что-то важное не документировано.

Пользуйтесь use common::sense и не будет никаких проблем.

За исключением того, что как и с ним так и без него эта маленькая программа не будет печатать «ß», т.к. правильный способ выводить символы на экран - binmode STDOUT с указанием кодировки (это тоже есть в perldoc, но кто же его читает..). Этот пример кода демонстрировал Warning, в обучающих целях. А common::sense просто отключает многи варнинги.

vsespb
()
Ответ на: комментарий от vsespb

Статья зачетная.

Из всех тонкостей (юникод-флаг для Encode::decode, Digest::SHA и т.д.), что ты расписал я не пользовался ни одной. Не потому, что программы были слишком простыми, а потому, что делал простые интерфейсы. А у многих новичков возникают только трудность понимания того, что перл оперирует «сокращенным» вариантом utf8.

cast outtaspace

gh0stwizard ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.