as.*_*as. 19 unicode shell perl utf-8
在Perl中编写支持Unicode的单行程序的正确方法是什么?显而易见的方式:
$ echo '????' | perl -lne 'print if /?/'
????
Run Code Online (Sandbox Code Playgroud)
...有点似乎是第一眼看到的,但这只是一个意外:Unicode被解释为字节,如下一个示例所示:
$ echo '???? != ????' | perl -mString::Diff=diff -lne 'print join(" ", diff($1, $2)) if /(.*)!=(.*)/' => 29
??[??]??[ ] { }??{??}??
Run Code Online (Sandbox Code Playgroud)
只使用-C
标志将STDIN
/ STDOUT
等设置为UTF-8本身是不够的:
$ echo '????' | perl -C -lne 'print if /?/'
[no output]
Run Code Online (Sandbox Code Playgroud)
...因为现在文本-e
不被解释为Unicode.
所以这是要走的路(假设一个理智的LOCALE - 即形式中的一个"*.UTF?8"
),如下所示:
$ perl -C -Mutf8 [...]
Run Code Online (Sandbox Code Playgroud)
dax*_*xim 17
是的,加载utf8
pragma需要?
将源代码中的" "UTF-8序列解释为字符而不是单独的字节.
Perl -C
命令行开关和utf8
pragma是与语言环境无关的,但是shell的echo
命令不是.
utf8::all
如果我需要处理unicode,我喜欢使用
echo '????' | perl -Mutf8::all -lne 'print if /?/'
Run Code Online (Sandbox Code Playgroud)
PS.使用-C
你也需要给出特定的标志,AFAIK