加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

在Perl中编写支持Unicode的单行程序

发布时间:2020-12-15 21:19:14 所属栏目:大数据 来源:网络整理
导读:在Perl中编写Unicode感知单行的正确方法是什么?明显的方法: $ echo 'フーバー' | perl -lne 'print if /フ/' フーバー …似乎一见钟情,但这只是一个意外:Unicode被解释为字节,如下例所示: $ echo 'フーバー != フウバー' | perl -mString::Diff=diff -
在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命令不是。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读