[Moscow.pm] unicode & regexp
Victor Efimov
victor на vsespb.ru
Чт Май 22 23:41:39 PDT 2014
допустим в ФС находятся файлы не в той кодировке. такого не должно
быть, но бывает (очень часто, обычно
как раз у юзеров которые что-то проограммируют, и их самописные
скрипты неправильно обращаются с кодировками)
и это не причина чтобы в программе был баг
touch $(echo раз|iconv -t windows-1251)
touch $(echo два|iconv -t windows-1251)
cat e.pl
use Getopt::Long;
use utf8::all;
use Data::Dumper;
my %h = map { $_ => 1} @ARGV;
print Dumper \%h;
__END__
perl e.pl *
$VAR1 = {
'e.pl' => 1,
"\x{fffd}\x{fffd}\x{fffd}" => 1
};
(т.е. два уникальных файла в каталоге, причём имя второго - не
правильное, да и файла на самом деле должно быть три)
а без use utf8::all:
$VAR1 = {
'���' => 1,
'e.pl' => 1,
'���' => 1
};
т.е. операционная система технически передаёт в скрипт бинарные
данные, которые не обязательно являются текстом в какой-либо
кодировке.
может передавать что угодно.
да можно ещё много сценаривет придумать. я уж не говорю пр то что
локаль может быть не-UTF8 (под *BSD), не понятно зачем смешивать
юникод (в котором
работает perl, не зависимо от локали) и вывод stdout/stderr, ввод
@ARGV которые, обычно совпадают с локалью и ещё readdir (который может
не совпадать с локалью)
23 мая 2014 г., 1:20 пользователь Nick Knutov <mail на knutov.com> написал:
> А можно пример из реальной жизни, когда в @ARGV бинарные данные, которые
> интерпретируются как символы и всё получается не так, как должно быть?
>
>
> 23.05.2014 2:09, Victor Efimov пишет:
>> Всякие эти модули и советы типа "какие 10 прагм включить чтобы с
>> unicode было всё ок" делают разбор полётов только сложнее
>> utf8::all пытается интерпретировать @ARGV как символы, хотя это
>> бинарные данные (и делает это глобально, что может вызвать проблемы во
>> всяких getopts модулях), пытается интерпретировать имена файлов как
>> символы, хотя в linux это бинарные данные, это есть, но не
>> документировано
>> https://github.com/doherty/utf8-all/commit/bc37b2a3dc73332c587c195cb119a0450aa36afa
>>
>>
>> 22 мая 2014 г., 23:27 пользователь Stanislaw Pusep
>> <creaktive на gmail.com> написал:
>>> Вместо:
>>>
>>> use utf8;
>>>
>>> Пишем:
>>>
>>> use utf8::all;
>
> --
> Best Regards,
> Nick Knutov
> http://knutov.com
> ICQ: 272873706
> Voice: +7-904-84-23-130
> --
> Moscow.pm mailing list
> moscow-pm на pm.org | http://moscow.pm.org
Подробная информация о списке рассылки Moscow-pm