如何在Perl中用ASCII替换Unicode字符?

ste*_*nmm 13 unicode perl utf-8

我可以在vim中这样做:

:%s/\%u2013/-/g
Run Code Online (Sandbox Code Playgroud)

我如何在Perl中执行等效操作?我以为这会做到但它似乎没有起作用:

perl -i -pe 's/\x{2013}/-/g' my.dat
Run Code Online (Sandbox Code Playgroud)

mir*_*rod 36

对于通用解决方案,Text :: Unidecode几乎可以将任何被抛出的内容转换为纯US-ASCII.

所以在你的情况下,这将工作:

perl -C -MText::Unidecode -n -i -e'print unidecode( $_)' unicode_text.txt
Run Code Online (Sandbox Code Playgroud)

-C用于确保输入读取为utf8

它转换为:

l'été est arrivé à peine après aôut
¿España es un paìs muy lindo?
some special chars: » « ® ¼ ¶ – – — ?
Some greek letters: ? ÷ ? ¬ the ? and ? (or is it ??)
hiragana? ??? ??
????????????
?????? ?????
Run Code Online (Sandbox Code Playgroud)

进入这个:

l'ete est arrive a peine apres aout
?Espana es un pais muy lindo?
some special chars: >> << (r) 1/4 P - - -- N
Some greek letters: b / Th ! the a and o (or is it O?)
hiragana? miseru desu
Zdravstvuitie
lslm `lykm
Run Code Online (Sandbox Code Playgroud)

最后一个显示了模块的限制,它不能推断出元音并从原始的阿拉伯语中得到as-salaamu`alaykum.我认为这仍然很好