我希望我的所有工具包都使用UTF-8,但发现Windows上的某些工具似乎使用CP1252(这似乎是特定于Windows的)。这是否会创建不兼容的输出,如果是,则创建哪些代码点?如果是这样,我能对此做些什么吗?
(我不完全理解这些问题,所以我很感激这些编码的基础教育。)
答案 0 :(得分:6)
在Windows上对代码页1252进行硬编码的工具非常不太可能。更有可能的是它恰好是您机器上的默认代码页。 1252用于西欧和美洲。它在“控制面板”,“区域和语言”选项中配置。他们一直在使用不同的名称,在Win7上,它位于“管理”选项卡“更改系统区域设置”中。
是的,许多工具使用默认代码页,除非他们有充分的理由选择其他编码。 The BOM是一个很好的理由。值得注意的例子是Notepad(除非你将File + Open对话框中的Encoding更改为Ansi之外的其他内容)和C / C ++编译器。使用默认代码页通常不需要做任何特殊操作。当您没有BOM时,猜测文本文件的正确代码页是不可能准确的。对于一个非常有趣的战争故事,谷歌“布什隐藏了事实”。
答案 1 :(得分:5)
CP1252和UTF-8对于所有字符都是相同的<他们的不同之处不同。因此,如果你坚持使用英语并远离变音符号,这些将是相同的。
大多数Windows工具将使用设置为当前用户当前代码页的任何内容,对于美国Windows,默认为1252。您可以非常轻松地将其更改为其他代码页。但是UTF-8不是Windows的可用代码页选项之一。 (我希望如此)。
答案 2 :(得分:5)
现在,关于你的问题:是的,还有一些工具可以阻止UTF-8文件。但越来越多的工具“得到它”。如果您正在开发自己的东西,您可能需要查看Python 3,其中所有字符串都是Unicode。理念是尽可能早地将所有输入转换为Unicode(如有必要),并尽可能晚地将它们重新转换为目标编码。有一些工具包可以很好地猜测特定文件的编码(例如,Mark Pilgrim的chardet,端口Mozilla's encoding detector)。如果您正在使用未指定编码的文件,这很好。
答案 3 :(得分:2)
Windows下的某些实用程序会理解文件开头的UTF-8 byte-order mark。不幸的是,我不知道如何确定这是否有效,除了尝试它。
答案 4 :(得分:1)
Windows支持UTF-8,但不支持当前代码页。您可以使用UTF-8进行转换,但不能将其设置为当前代码页。
首先不要试图通过设置代码页来浪费时间 - 这种方法会让你想起Sisyphus神话 - 你无法使用代码页解决问题,你必须使用Unicode。
唯一真正的解决方案是将您的应用程序构建为Unicode,以便它将使用UTF-16 并在输入/输出操作中转换为UTF-8或从UTF-8转换。这很简单,因为fopen支持读写UTF-8。
关于使用UTF-8文件的其他Windows工具,你不应该知道,因为如果该工具能够使用ASCII,它将适用于UTF-8(即便如此,它可能无法区分Unicode字符,但至少它将能够加载/解析文件)。
BTW,您忘了指定您使用的编程语言以及您正在考虑使用的Windows工具。
此外,如果您对更多国际化内容感兴趣,请访问我的blog.i18n.ro