Я пытаюсь написать сценарий Perl, используя прагму «utf8», и получаю неожиданные результаты. Я использую Mac OS X 10.5 (Leopard) и редактирую с помощью TextMate. Все мои настройки и для моего редактора, и для операционной системы по умолчанию настроены на запись файлов в формате utf-8.
Однако, когда я ввожу следующее в текстовый файл, сохраняю его как «.pl» и выполняю, я получаю дружественный «ромб с вопросительным знаком» вместо символов, отличных от ASCII.
#!/usr/bin/env perl -w
use strict;
use utf8;
my $str = 'Çirçös';
print( "$str\n" );
Есть идеи, что я делаю не так? Я ожидаю получить на выходе «irçös», но вместо этого получаю «irirçös».
utf8
:Ответы:
use utf8;
не включает вывод Unicode - он позволяет вам вводить Unicode в вашей программе. Добавьте это в программу перед своимprint()
утверждением:Посмотрим, поможет ли это. Это должно сделать
STDOUT
вывод в UTF-8 вместо обычного ASCII.источник
Вы можете использовать директиву open .
Например, ниже устанавливает STDOUT, STDIN и STDERR для использования UTF-8 ....
источник
TMTOWTDI , выберите метод, который лучше всего подходит для вашей работы. Я использую метод среды, поэтому мне не нужно об этом думать.
В окружающей среде :
в командной строке :
или с binmode :
или с PerlIO :
или с открытой прагмой :
источник
SDL
подразумевается как с, так-C
и сPERL_UNICODE
.use open ':locale'
Прагма также стоит упомянуть, потому что это в-сценарии эквивалент-C
иexport PER_UNICODE=
. Любой из этих 3 предоставит вам поддержку UTF8 для всех потоков ввода и вывода (будь то файлы или stdin / stdout / stderr), при условии, что локаль вашей среды основана на UTF8. Наконец, чтобы также обрабатывать исходный код как UTF8, используйтеuse utf8;
прагму.perl -Mutf8 -CSDL -e '...'
позволяет использовать / выводить UTF-8, а также использовать литералы UTF-8 внутри,-e
например, для папки сperl -Mutf8 -CASDL -pe 'y/āáǎàēéěèīíǐìōóǒòūúǔùǖǘǚǜĀÁǍÀĒÉĚÈĪÍǏÌŌÓǑÒŪÚǓÙǕǗǙǛ/aaaaeeeeiiiioooouuuuüüüüAAAAEEEEIIIIOOOOUUUUÜÜÜÜ/'
Вы также хотите сказать, что строки в вашем коде - это utf-8. См. Почему современный Perl по умолчанию избегает UTF-8? . Так установите не только
PERL_UNICODE=SDAL
но иPERL5OPT=-Mutf8
.источник
Спасибо, наконец-то есть решение, чтобы не помещать utf8 :: encode во всем коде. Для синтеза и завершения для других случаев, таких как запись и чтение файлов в utf8, а также работает с LoadFile файла YAML в utf8
где cache.yaml:
источник
сделайте в своей оболочке: $ env | grep LANG
Это, вероятно, покажет, что ваша оболочка не использует локаль utf-8.
источник