Разница между строковым представлением и значением в Perl - PullRequest
0 голосов
/ 25 мая 2011

Я озадачен следующей разницей.

$str="\xd6\xd0";
decode("GBK",$str);

против

$str="d6d0";
@list=map "\\x".$_,unpack("(a2)*", $str);
$str=join "", @list;
decode("GBK",$str);

Почему в первом случае он работал для вывода символа, а во втором - не работает?Как я могу заставить его работать в последнем случае?

Большое спасибо.

Ответы [ 2 ]

5 голосов
/ 25 мая 2011

Если вы пытаетесь превратить "d6d0" в "\xd6\xd0", вам нужно pack 'H*':

my $str = "d6d0";
$str = pack('H*', $str);
decode("GBK",$str);

join не интерпретирует escape-последовательности, он просто объединяет строки.

2 голосов
/ 25 мая 2011

В первом случае анализатор интерпретирует escape-последовательности и создает строку длиной два байта. Во втором случае вы создаете строку длиной восемь символов: \xd6\xd0. Вы, вероятно, хотите распаковать, как вы делаете, но без добавления \x, а затем использовать pack с шаблоном (H2)* вместо объединения, чтобы собрать все вместе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...