【发布时间】:2012-03-18 20:19:09
【问题描述】:
在 Perl 中编写支持 Unicode 的单行代码的正确方法是什么?显而易见的方式:
$ echo 'フーバー' | perl -lne 'print if /フ/'
フーバー
...乍一看似乎可以工作,但这只是一个意外:Unicode 被解释为字节,如下一个示例所示:
$ echo 'フーバー != フウバー' | perl -mString::Diff=diff -lne 'print join(" ", diff($1, $2)) if /(.*)!=(.*)/' => 29
フ?[??]バー[ ] { }フ?{??}バー
仅使用-C 标志将STDIN/STDOUT 等 设置为UTF-8 本身是不够的:
$ echo 'フーバー' | perl -C -lne 'print if /フ/'
[no output]
...因为现在-e 中的文本不会被解释为 Unicode。
这就是要走的路(假设一个理智的 LOCALE - 即"*.UTF‑8" 形式的一个),如下所示:
$ perl -C -Mutf8 [...]
【问题讨论】: