如何转换U+;XXXXX序列到perl中的字符?
这个 印刷品如何转换U+;XXXXX序列到perl中的字符?,perl,Perl,这个 印刷品 perl -CO -E 'say "\N{U+00E1}"' 如何实现与以下相同的目标: á 使用: 如果可以控制输入内容,也可以使用eval: echo "U+00E1" | perl -Mcharnames=short -CO -lnE 'say charnames::vianame($_)' 纯基本Perl解决方案: echo "U+00E1" | perl -CO -lnE 'eval "\$a=\"\\N{$_}\";"; say $a;' 请不要使用不安全的(e
perl -CO -E 'say "\N{U+00E1}"'
如何实现与以下相同的目标:
á
使用:
如果可以控制输入内容,也可以使用eval
:
echo "U+00E1" | perl -Mcharnames=short -CO -lnE 'say charnames::vianame($_)'
纯基本Perl解决方案:
echo "U+00E1" | perl -CO -lnE 'eval "\$a=\"\\N{$_}\";"; say $a;'
请不要使用不安全的(eval
)解决方案,如:
echo "U+00E1" | perl -C -nE 'say chr(hex) if s/U\+//'
使用
pack
echo "U+00E1" | perl -C -nE 's/U\+/0x/;eval qq{say chr($_)}'
输出
塔克斯。在4分钟内接受:)使用
-l
,您不需要-E
和say
。Echo命令还可以生成UTF-8:Echo-E'\UE1'\124; perl-CSA-nE'print$
像包一样,但老实说,仍然不了解包的工作原理。@kobame:pack
包很不错,但返回的不是“aa”.是的,看不出有什么问题。现在已经修好了。我仍然得到不同的输出。检查xxd
$echo“U+00E1”| perl-C-nE的/U\+/0x/;评估qq{say chr($)}xxd 00000000:c3a1 0a…$回显“U+00E1”| perl-C-nE'如果s/U\+/'| xxd 00000000:c3a1 0a…$echo“U+00E1”| perl-Mcharnames=short-CO-lnE'say charnames::vianame($|)| xxd 00000000:c3a1 0a
如果对代码进行一些解释,这个答案会更好。
echo "U+00E1" | perl -C -nE 'say chr(hex) if s/U\+//'
echo "U+00E1" | perl -C -nE 's/U\+/0x/;eval qq{say chr($_)}'
echo U+0041 U+0042 U+0043 U+00E1 | perl -ne"print pack 'U', hex for /\p{hex}+/g"
ABCá