Perl 中 Unicode 的使用与处理
一、Unicode 安全相关
在处理 Unicode 时,首先要阅读《Unicode 安全注意事项》。下面是一些具体需要注意的点:
1.1 错误的 UTF - 8 编码
UTF - 8 的原始规范在从一个输入的 Unicode 字符生成编码输出的字节数方面存在一定的解释空间。严格来说,应该生成最短的 UTF - 8 字节序列,否则在 UTF - 8 连接的接收端可能会出现输入缓冲区溢出的问题。Perl 总是生成最短长度的 UTF - 8,并且当开启警告时,Perl 会对非最短长度的 UTF - 8 以及其他格式错误(如代理项,它们不是有效的可交换 Unicode 代码点)发出警告。
1.2 正则表达式模式匹配
如果不熟悉 Unicode,正则表达式模式匹配可能会让你感到意外。从 Perl 5.14 开始,有几个模式修饰符可用于控制此行为,称为字符集修饰符。具体细节可在perlre的“字符集修饰符”部分找到。
1.3 Perl 在 ASCII 和 Unicode 世界中的情况
Perl 处于两个世界之间:旧的 ASCII 和单字节区域设置的世界,以及新的 Unicode 世界,并在必要时进行升级。如果你的遗留代码没有明确使用 Unicode,则不会自动切换到 Unicode。
1.4 EBCDIC 平台上的 Unicode
Unicode 在 EBCDIC 平台上是受支持的。除非专门讨论 ASCII 与 EBCDIC 的问题,否则本文档及其他地方提及的 UTF - 8 编