utf8.out.2.txt"); binmode(TROIS, ":utf8"-6ren">
gpt4 book ai didi

perl - 用 perl 错误编写 utf8?

转载 作者:行者123 更新时间:2023-12-01 08:34:22 25 4
gpt4 key购买 nike

我的问题很简单。我想用我的 Perl 脚本输出 UTF-8。此代码无效。

use utf8;
open(TROIS,">utf8.out.2.txt");
binmode(TROIS, ":utf8");
print TROIS "Hello\n";

输出文件不是 UTF-8 格式。 (我的文件脚本是用 UTF-8 编码的)但是如果我在我的 print 中插入一个重音字符,那么它就可以工作并且我的输出文件是 UTF-8 格式的。示例:

print TROIS "é\n";

我在 Windows 下使用 ActivePerl 5.10。可能是什么问题?

最佳答案

您使用 Hello\n 编写的只是 ASCII 字符。幸运的是,ASCII 仍然是完全有效的 UTF-8。但是,编辑器的自动检测很可能不会将 UTF-8 显示为编码,因为他们没有任何东西可以判断文件内容的编码。我猜你根本不知道文件编码是如何工作的。

文件的编码是一种属性,通常不存储在文件中或与文件一起存储在外部。许多编辑器只是根据他们运行的操作系统或环境设置(系统语言)假设某种编码,或者它们包括某种半智能自动检测(由于文件编码不能自动检测,这可能仍然失败)明确地检测到)。这就是为什么当你用 binmode 或相应的 I/O 层读取文件时,你必须告诉 Perl 文件是用 UTF-8 编码的。

如果文本文件的编码是 UTF 系列之一(UTF-8、UTF-16 LE 和 BE、UTF-32 LE 和 BE),现在有一种方法可以标记文本文件的编码。这种方式称为BOM (byte order mark) .但是,使用 BOM 生成文件的时候,UTF-8 还没有像今天这样广泛传播。它通常会带来比它解决的更多和不同的问题,尤其是由于编辑器和应用程序通常根本不支持 BOM。因此,现在应该避免使用 BOM。

当然,也有异常(exception),其中文件格式包含某些说明文件编码的指令。 XML 与它的 DOCTYPE 声明有关。但是,即使对于此类文件,您也必须识别文件是否以每个字符至少使用两个字节(UTF-16/UTF-32)的多字节编码进行编码,以便解析 DOCTYPE 声明放在首位。这根本不简单;)

关于perl - 用 perl 错误编写 utf8?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13874730/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com