Преобразование шестнадцатеричной строки UTF-16, внутреннее представление Perl

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

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».


person XoR    schedule 17.02.2011    source источник


Ответы (1)


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

person ikegami    schedule 18.02.2011