【发布时间】:2010-02-17 11:51:31
【问题描述】:
文件句柄上的 utf8 pragma 和 utf8 编码让我感到困惑。例如,这个看似简单的代码......
use utf8;
print qq[fü];
需要明确的是,“fü”上的十六进制转储是 66 c3 bc,如果我没记错的话是正确的 UTF8。
打印出66 fc,它不是UTF8,而是Unicode,或者可能是Latin-1。关闭use utf8,我得到66 c3 bc。这与我的预期相反。
现在让我们添加文件句柄 pramgas。
use utf8;
binmode *STDOUT, ':encoding(utf8)';
print qq[fü];
现在我得到66 c3 bc。但是删除 use utf8 会得到 66 c3 83 c2 bc,这对我来说没有任何意义。
如何使我的代码使用 UTF8 进行 DWIM?
PS 我的语言环境设置为“en_US.UTF-8”和 Perl 5.10.1。
【问题讨论】:
-
查看最新版Effective Perl Programming中的Unicode章节。它在 Safari Online 的粗剪中 :)
-
迟到了,但我真的建议任何想要快速掌握 Perl 字符编码的人阅读 Juerd 的“perlunitut”和“perlunifaq”perldocs。它们是相当新的(在 5.10.0 和 5.8.9 中添加)所以“阅读每个 perldoc”的老手可能不知道它们在那里 :)