perl - 用 Perl 编写支持 Unicode 的单行程序

标签 perl shell unicode utf-8

在 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 [...]

最佳答案

是的,正在加载 utf8 pragma需要解释“ ” 源代码中的 UTF-8 序列作为字符而不是单独的字节。

Perl -C命令行开关和 utf8 pragma 与语言环境无关,但 shell 的 echo命令不是。

关于perl - 用 Perl 编写支持 Unicode 的单行程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9497557/

相关文章:

c++ - 使用 boost 和标准 C++ 进行 Unicode 安全查找

html - cgi/perl/html - 打印成 html 时要转义哪些字符?

perl - 通过替换从另一个定义一个字符串变量?

linux - 确定 bash 函数的定义位置

linux - 提示在 bash 脚本中输入,然后在脚本中使用它

linux - 使用 grep 命令获取多个模式的重合总数

windows - 为什么 perl 看不到 Windows 中存在的文件?

为 IN 子句传递 DBI-> 执行值时出现 perl 错误

python - Python 3.3 是否比 2.7 更好地解码和重新编码已抓取的 Web 文本为 UTF-8?比如,好多了?

java - Java 16 位字符如何支持 Unicode?