Преобразование шестнадцатеричной строки UTF-16 во внутреннем представлении Perl - PullRequest
1 голос
/ 17 февраля 2011

Я не знаю, почему этот код не работает:

use strict;
use warnings;
use Encode qw/decode/;
my $entity_unicode = "00A0";
$entity_unicode = decode("UTF-16", pack('H4', $entity_unicode));
print $entity_unicode, "\n";

Распечатывается: "UTF-16: нераспознанная спецификация a0 в /usr/lib/perl/5.10/Encode.pmстрока 174. ".

Ответы [ 2 ]

3 голосов
/ 17 февраля 2011
$entity_unicode = decode("UTF-16BE", pack('H4', $entity_unicode));

Указание «UTF-16BE» вместо просто «UTF-16» скажет ему принять порядок байтов в старшем порядке.

См. Как я могу декодировать данные UTF-16 в Perl, когда я не знаю порядок байтов?

2 голосов
/ 18 февраля 2011

Без спецификации (U + FEFF) в начале строки для декодирования невозможно узнать, является ли 00 A0 U + 00A0 (UTF-16be) или U + 0A00 (UTF-16le, используется Windows) , Нужно указать точное кодирование, когда спецификация отсутствует. В данном случае это UTF-16be.

...