3

我希望我的所有工具包都使用UTF-8,但发现 Windows 上的一些工具似乎使用CP1252(这似乎是特定于 Windows 的)。这是否会创建不兼容的输出,如果是,则在哪些代码点?如果是这样,我能做些什么吗?

(我不完全理解这些问题,所以我会感谢这些编码的基础教育)。

4

5 回答 5

6

六岁仍然相关:每个软件开发人员绝对、肯定必须了解 Unicode 和字符集的绝对最低要求(没有借口!)

现在,关于您的问题:是的,仍然有一些工具会阻塞 UTF-8 文件。但越来越多的工具正在“得到它”。如果你正在开发自己的东西,你可能想研究一下所有字符串都是 Unicode 的 Python 3。其理念是尽早将所有输入转换为 Unicode(如有必要),并尽可能晚地将它们重新转换为目标编码。有一些工具包可以很好地猜测特定文件的编码(例如,Mark PilgrimchardetMozilla 编码检测器的一个端口)。如果您正在处理未指定编码的文件,这很好。

于 2009-12-21T22:18:42.020 回答
6

在 Windows 上对代码页 1252 进行硬编码的工具不太可能。更有可能的是,它恰好是您机器上的默认代码页。1252 用于西欧和美洲。它在控制面板、区域和语言选项中进行配置。他们一直在为它使用不同的名称,在 Win7 上它位于管理选项卡中,更改系统区域设置。

是的,许多工具使用默认代码页,除非他们有充分的理由选择另一种编码。 BOM就是一个很好的理由。值得注意的例子是记事本(除非您将 File + Open 对话框中的 Encoding 更改为 Ansi 以外的其他内容)和 C/C++ 编译器。使用默认代码页通常不需要做任何特别的事情。当您没有 BOM 时,无法准确猜测文本文件的正确代码页。谷歌“布什隐藏了事实”以获得一个非常有趣的战争故事。

于 2009-12-21T22:34:33.427 回答
5

CP1252 和 UTF-8 对于小于 128 的所有字符都是相同的。它们在此之上有所不同。因此,如果您坚持使用英语并远离变音符号,这些将是相同的。

大多数 Windows 工具将使用设置为当前用户的当前代码页的任何内容,对于美国 Windows,它将默认为 1252。您可以很容易地将其更改为另一个代码页。但 UTF-8 不是 Windows 可用的代码页选项之一。(我希望是)。

于 2009-12-21T21:45:43.427 回答
2

Windows 下的一些实用程序将理解文件开头的UTF-8 字节顺序标记。不幸的是,除了尝试之外,我不知道如何确定这是否可行。

于 2009-12-21T21:55:28.597 回答
1

UTF-8 在 Windows 上受支持,但不作为当前代码页。您可以使用 UTF-8 进行转换,但不能将其设置为当前代码页。

首先不要试图通过设置代码页来浪费时间——这种方法会让你想起西西弗斯的神话——使用代码页并不能真正解决问题,你必须使用 Unicode。

您唯一真正的解决方案是将您的应用程序构建为 Unicode,以便它将使用 UTF-16并在输入/输出操作中转换为/从 UTF-8。这很简单,因为 fopen 支持读取或写入 UTF-8。

关于其他 Windows 工具与 UTF-8 文件的使用,您不应该知道,因为如果该工具能够与 ASCII 一起使用,它将与 UTF-8 一起使用(即使它可能无法区分 Unicode 字符,但在至少它将能够加载/解析文件)。

顺便说一句,您忘记指定您正在使用什么编程语言以及您正在考虑使用哪些 Windows 工具。

另外,如果您对更多国际化内容感兴趣,请访问我的blog.i18n.ro

于 2009-12-23T10:05:20.570 回答