有何区别开编译不同UTF8?(How differs the open pragma with di

2019-07-18 20:49发布

难道这三个版本都不同的表现?

use open qw( :encoding(UTF-8) :std );  
use open qw( :encoding(UTF8) :std );  
use open qw( :utf8 :std );  

Answer 1:

首先:utf8只有市场上赢得文本为UTF-8也不会检查其是否有效。 请参见上PerlMonks这个职位的信息。

:encoding是一个扩展层设为PerlIO的,PERL perldoc perliol

“:编码”使用编码; 使得这一层可用,虽然PerlIO.pm“知道”哪里可以找到它。 它是需要一个参数,因为它是如此被称为层的一个例子:打开($跳频,“<:编码(ISO-8859-7)”,$路径名);

另外两个问题都回答的常见问题perldoc perlunifaq

是什么区别“:编码”和“:UTF8”? 由于UTF8是Perl的内部格式之一,通常可以直接跳过的编码或解码步骤,并直接操纵UTF8标志。 代替“:编码(UTF8)”,就可以简单地用“:UTF8”,它跳过编码步骤,如果数据已经在内部表示为UTF8。 这被广泛认为是当你写良好的行为,但阅读时,它可能是危险的,因为它会导致内部不一致时,你有无效的字节序列。 使用“:UTF8”输入有时可能会导致安全漏洞,所以请使用“:编码(UTF-8)”来代替。 相反,“解码”和“编码”的,你可以使用“_utf8_on”和“_utf8_off”,但这被认为是不好的风格。 尤其是“_utf8_on”可能是危险的,出于同样的原因,“:UTF8”即可。 有一些快捷键oneliners; 请参见 “-c” 在perlrun。

什么是“UTF-8”和“UTF-8”之间的区别? “UTF-8”是官方标准。 “UTF8”是的是什么它接受自由的Perl的方式。 如果你有事情是不那么自由的沟通,你可能要考虑使用“UTF-8”。 如果你有事情是过于宽松沟通,你可能必须使用“UTF-8”。 完整的解释是编码。 “UTF-8” 在内部被称为 “UTF-8-严格”。 本教程使用UTF-8始终如一,即使UTF8实际上是内部使用,因为差别是很难做,而且大多是不相关的。 例如,UTF8可以用于码点不Unicode中存在,如9999999,但如果你编码成UTF-8,你会得到一个替换字符(默认情况下,请参阅“处理格式错误的数据”在编码更多处理这个问题的方式)好吧,如果你坚持:“内部格式”是UTF8,不是UTF-8。 (当它是不是其他的编码)。

open (即,编译指示use open )只设置用于输入和输出默认PerlIO的层 ; :std做以下,

在“:STD”自身subpragma没有效果,但如果与组合“:UTF8”或“:编码” subpragmas,将其转换的标准文件句柄(STDIN,STDOUT STDERR)遵守选择的用于输入/输出编码处理。 例如,如果两个输入和流出被选择为“:编码(UTF8)”,一个“:STD”将意味着STDIN,stdout和stderr,可以在“:编码(UTF8)”。 在另一方面,如果选择只输出是在“:编码(koi8r)”,一个“:STD”将导致仅输出和错误是在“koi8r”。 该“:语言环境” subpragma隐式开启“:STD”。

所以:std是subpragma(特定open.pm),设置标准流接收Unicode输入的perl :utf8如上。



Answer 2:

埃文似乎有了答案。 对于未来的易用性看uft8::all ,“打开的Unicode -这一切”。



文章来源: How differs the open pragma with different utf8?
标签: perl utf-8