如何在Perl中将文字字符串转换为其表示的unicode?

如何在Perl中将文字字符串转换为其表示的unicode?,perl,unicode,string-literals,Perl,Unicode,String Literals,如果我有一个像 my $x = 'JPMorgan Chase \x{0026} Co'; 我想把它转换成 "JPMorgan Chase \x{0026} Co" 其中包含一个unicode。(请注意双引号和单引号之间的区别。) 最简单的方法是什么?这是一个简化的例子。实际问题有很多这样的例子 如果您需要处理的唯一转义格式是\x{1234},那么一种处理方法可能是将转义序列与正则表达式匹配,然后使用chr(hex($1))将十六进制字符串转换为字符: my $x = 'JPMorgan

如果我有一个像

my $x = 'JPMorgan Chase \x{0026} Co';
我想把它转换成

"JPMorgan Chase \x{0026} Co" 
其中包含一个unicode。(请注意双引号和单引号之间的区别。)


最简单的方法是什么?这是一个简化的例子。实际问题有很多这样的例子

如果您需要处理的唯一转义格式是
\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"

而Daskwuff&mob则能很好地回答您的直接问题。(FWIW:mob的
$x=evalqq{“$x”}
有一种不可否认的优雅。)真正的问题是,为什么要在插入字符串之外的其他地方进行Perl字符转义?如果您从源代码(IO)以外的某个地方获取该字符串,并且原始Unicode编码是不合适的,那么考虑一个更常见的编码,其中Perl有现成的模块:

  • URI编码:
    %26
  • XML编码:
    &
  • JSON编码:
    \u0026
…还有许多其他的。这样的编码将使您的IPC和数据文件与其他系统的互操作性更强


。。。当然,如果这些东西在Perl源代码中,只需将它们放在双引号中,让编译器阶段插入它们。

$x=eval qq{“$x”}
?这确实有效。谢谢!另请参见,这也有效。以前不知道/e标志。谢谢。至少可能需要处理
\\
。@ikegami我的意思是,这取决于输入的实际内容。这个问题只提到了
\x{1234}
语法,所以……没错。这个问题可能(甚至肯定)遗漏了什么,因此答案也是如此,所以应该小心。