Perl 最初并不是以 Unicode 为友好,处理 UTF-8 需要明确的指示。现代 Perl 能够将字符串作为内部抽象(utf8-flagged scalars)存储,但输入/输出操作需要特别关注。
binmode, :encoding(UTF-8))。use utf8;。open my $fh, '<:encoding(UTF-8)', 'myfile.txt' or die $!; binmode STDOUT, ':encoding(UTF-8)';
Encode, utf8, open, charnames。use Encode; my $bytes = encode('UTF-8', $string); # 获取字节 my $string = decode('UTF-8', $bytes); # 获取字符串
仅仅在脚本的开头添加
use utf8;,是否足以让所有输入/输出操作在 UTF-8 中进行?
答案: 不!指令 use utf8; 只是解读源代码中的 Unicode 文本。对于输入/输出,需要在 open 时或通过 binmode/open pragma 设置 IO 层!例如:
binmode STDOUT, ':encoding(UTF-8)'; open my $fh, '>:encoding(UTF-8)', $filename;
故事
故事
故事
在将 Perl 服务与 MySQL 客户端集成时,忽略了客户端的 utf8 配置,处理字节字符串。在与 web 界面的交汇处出现了缺陷——部分字符被破坏,部分请求则“破坏”了数据结构。通过 Encode 显式重编码和设置 'mysql_enable_utf8' 来解决这个问题。