Perl Encode - символы Великобритании - PullRequest
1 голос
/ 15 июня 2010

Это вопрос части 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 €

Разве результаты не должны быть закодированы? что я тут не так делаю?

EDIT:

Добавлено предложенное:

use utf8;

и теперь я получаю это:

Encoded UK: UK �

выдергивание волос сейчас: /

Ответы [ 3 ]

4 голосов
/ 15 июня 2010

Не дергай себя за волосы.Вы все сделали правильно, закончили и уже получаете намеченные данные;вывод сбивает вас с толку, потому что вы, вероятно, смотрите на него с терминала, который не настроен для 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 .

Кодовая точка A4 - этодействительно символ евро на латыни-9 .

1 голос
/ 15 июня 2010

Я думаю, что, возможно, вы неправильно кодируете символ в своем скрипте. Что ваш редактор считает своей кодировкой?

например. Я только что попробовал это, чтобы обойти это полностью:

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 Encoding: iso-8859-15  
Encoded UK: £  
0 голосов
/ 17 июня 2010

"использовать 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
...