如果我有像
这样的文字字符串my $x = 'JPMorgan Chase \x{0026} Co';
我想将其转换为
"JPMorgan Chase \x{0026} Co"
其中包含一个unicode。 (请注意双引号和单引号之间的区别。)
最简单的方法是什么?这是一个简化的例子。实际问题有很多这样的例子。
答案 0 :(得分:4)
如果你需要处理的唯一转义格式是\x{1234}
,那么处理它的一种方法可能是将转义序列与正则表达式匹配,然后使用chr(hex($1))
将十六进制字符串转换为一个角色:
my $x = 'JPMorgan Chase \x{0026} Co';
$x =~ s/\\x\{([0-9a-f]+)\}/chr(hex($1))/e;
say $x; # -> "JPMorgan Chase & Co"
答案 1 :(得分:2)
而duskwuff&暴徒做得很好,回答你的直接问题。 (FWIW:暴徒的$x = eval qq{"$x"}
具有不可否认的优雅。)真正的问题是为什么除了插值字符串之外你有Perl字符转义?如果您从源代码(IO)的某个其他获取此字符串,并且原始unicode编码不合适,请考虑一个更常见的编码,Perl可以使用这些编码:
%26
&
\u0026
......还有很多其他人。这样的编码将使您的IPC和数据文件与其他系统更加可互操作。
...当然,如果你的Perl源中的这些东西 ,只需将它们放在双引号中,让编译器阶段插入它们。