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
Другие вопросы по тегам