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

如何使Perl 6成为Unicode数据的往返安全?

发布时间:2020-12-15 21:50:05 所属栏目:大数据 来源:网络整理
导读:对于Unicode而言,天真的Perl 6程序不是往返安全的.它似乎在内部使用标准化表格组合(NFC)作为Str类型: $perl -CO -E 'say "ex{301}"' | perl6 -ne '.say' | perl -CI -ne 'printf "U+%04xn",ord for split //'U+00e9U+000a 通过文档我无法看到有关此行为的
对于Unicode而言,天真的Perl 6程序不是往返安全的.它似乎在内部使用标准化表格组合(NFC)作为Str类型:
$perl -CO -E 'say "ex{301}"' | perl6 -ne '.say' | perl -CI -ne 'printf "U+%04xn",ord for split //'
U+00e9
U+000a

通过文档我无法看到有关此行为的任何内容,我发现它非常令人震惊.我不敢相信你必须回到字节级别来往返文本:

$perl -CO -E 'say "ex{301}"' | perl6 -e 'while (my $byte = $*IN.read(1)) { $*OUT.write($byte) }' | perl -CI -ne 'printf "U+%04xn",ord for split //'
U+0065
U+0301
U+000a

是否所有文本文件都必须在NFC中才能使用Perl 6安全地进行往返行程?如果该文件应该在NFD中怎么办?我必须在这里遗漏一些东西.我无法相信这是故意的行为.

解决方法

答案似乎是使用Uni类型(NFD,NFC等的基类),但它现在并没有真正做到这一点,并且没有好的方法将文件转换为Uni字符串.因此,在将来某个未命名的点之前,除非将其视为字节,否则不能往返非规范化文件.

(编辑:李大同)

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

    推荐文章
      热点阅读