perl中字符串表示和值之间的差异

perl中字符串表示和值之间的差异,perl,encoding,Perl,Encoding,我对以下差异感到困惑 $str="\xd6\xd0"; decode("GBK",$str); vs 为什么在第一种情况下,它可以打印出字符,而在第二种情况下,它不工作?在后一种情况下,我怎样才能使它起作用 非常感谢。在第一种情况下,解析器解释转义序列并构建一个两字节长的字符串。在第二种情况下,您将创建一个八个字符的字符串: \xd6\xd0。您可能希望像现在这样解包,但不必预先添加\x,然后使用打包和模板(H2)*,而不是将其合并。如果您试图将“d6d0”转换为“\xd6\xd0”,您需要:

我对以下差异感到困惑

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

为什么在第一种情况下,它可以打印出字符,而在第二种情况下,它不工作?在后一种情况下,我怎样才能使它起作用


非常感谢。

在第一种情况下,解析器解释转义序列并构建一个两字节长的字符串。在第二种情况下,您将创建一个八个字符的字符串:
\xd6\xd0
。您可能希望像现在这样解包,但不必预先添加
\x
,然后使用
打包
和模板
(H2)*
,而不是将其合并。如果您试图将
“d6d0”
转换为
“\xd6\xd0”
,您需要:


不解释转义序列,它只是连接字符串。

请发布一个工作示例。您发布的代码段将不会自行运行。@sleske:错误在哪里?在我这方面,代码很好。谢谢。他的意思是,如果你将代码粘贴到一个文件中并运行它,你会得到一个关于未定义
decode
的错误,因为你没有
t
使用Encode`.@cjm:谢谢,了解我的人:-)。另外,问题是Perl库中有不止一个
decode
函数。至少有
utf8::decode
Encode::decode()
。嗯,现在已经回答了,所以这是一个没有实际意义的问题。是的,我刚想出来。我昨天花了很多时间,但运气不好只需调用
pack'H*”
即可将十六进制字符串转换为相应的字节。无需先
解包
。@cjm,如果我坚持先获取8字符字符串,是否可以使用
解包
将“\\xd6\\xd0”转换为“\xd6\xd0”:-)@cjm-绝对正确。我显然戴着眼罩@您可以使用
x
模板跳过字符。
$str="d6d0";
@list=map "\\x".$_,unpack("(a2)*", $str);
$str=join "", @list;
decode("GBK",$str);
my $str = "d6d0";
$str = pack('H*', $str);
decode("GBK",$str);