Perl Encode - символы Великобритании
Это часть 2 вопроса из этого вопроса.
Так что я пробую: закодировать функциональность, но безуспешно.
use Encode;
use utf8;
# Should print: iso-8859-15
print "Latin-9 Encoding: ".find_encoding("latin9")->name."\n";
my $encUK = encode("iso-8859-15", "UK €");
print "Encoded UK: ".$encUK."\n";
Результаты:
Encoded UK: UK €
Разве результаты не должны быть закодированы? что я тут не так делаю?
РЕДАКТИРОВАТЬ:
Добавил предложенное:
use utf8;
и теперь я получаю это:
Encoded UK: UK �
выдергивание волос сейчас: /
3 ответа
Не дергай себя за волосы. Вы все сделали правильно, закончили и уже получаете намеченные данные; вывод сбивает вас с толку, потому что вы, вероятно, смотрите на него с терминала, который не настроен для Latin-9, но для другой кодировки, предположительно UTF-8.
> perl -e'use utf8; use Encode; print encode "Latin-9", "Euro €"'
Euro �
> perl -e'use utf8; use Encode; print encode "Latin-9", "Euro €"' | hex
0000 45 75 72 6f 20 a4 Euro .
Кодовая точка А4 действительно является символом евро на латинице-9.
Я думаю, что, возможно, вы неправильно кодируете символ в своем сценарии. Что думает твой редактор в своей кодировке?
например, я только что попробовал это, чтобы обойти это полностью:
use Encode;
# Should print: iso-8859-15
print "Latin-9 Encoding: ".find_encoding("latin9")->name."\n";
my $encUK = encode("iso-8859-15", "\xA3");
print "Encoded UK: ", $encUK, "\n";
выход:
Latin-9 Кодировка: iso-8859-15 Кодированная Великобритания: £
"использовать utf8;" Начиная с Perl 5.8, используется только для сообщения Perl, что ваш исходный файл закодирован в UTF-8.
Так соответствует ли кодировка вашего источника тому, что вы говорите Perl?
С 'vim' необходимо использовать эту опцию, чтобы записать файл в UTF-8:
:set fenc=utf8
И чтобы вернуть UTF-8 при загрузке файла, вы должны определить fileencodings в вашем.vimrc:
set fileencodings=ucs-bom,utf-8,latin9