有没有办法将 Windows 7 设置为全局使用 UTF-8 作为标准?
将每个文本编辑器都设置为使用它真的很烦人。
答案1
简短的回答是不,不可能。
详细地说,恐怕您无法在 Windows 7 中找到一个全局编码选项,该选项允许您 1) 设置全局默认值,2) 您列出的所有应用程序都会遵守该默认值。
另外,我想问一下您这里要解决的问题是什么?
由应用程序选择是否在内部使用 unicode 来表示数据。虽然鼓励使用 unicode,您可能永远无法确定您的所有应用程序是否确实在内部支持它。
你可以做但是,这会更改列出的每个应用程序的默认字符编码:
- 对于 Eclipse,可以从中设置新文件的默认编码Windows > 首选项 > 常规 > 内容类型(看在 Eclipse 社区表单上发帖)
- 对于 Notepad++,导航至设置 > 首选项 > 新建文档/默认/目录并将编码设置为UTF-8
- 至于 Thunderbird,我很确定它已经使用 UTF-8 作为默认编码?(请参阅这些关于字符编码的注释)
- 对于 OpenOffice(和 LibreOffice),你实际上甚至不需要关心编码,因为 OpenOffice 保存的文档基于 XML,其中编码是在 XML 文件内部指定的(并且UTF-8已经是默认设置了)
- 从 UTF-8 的角度来看,PowerShell 比较棘手。它的默认编码是
UTF-16LE
。
答案2
这是不可能的,主要是因为 Windows 不允许 UTF-8 作为系统 ANSI 代码页,尽管它确实有一个 UTF-8 的 ANSI 代码页,代码页 65001。这似乎有几个原因:
- 当 Unicode 刚出现时,微软认为 UCS-2 是支持 Unicode 的最佳方式。当时 Unicode 是 16 位的。
- Windows 对每种支持的语言都有一个 ANSI 代码页,不像Unix和Linux可以独立设置语言和编码。
- 代码页 65001 并非在所有地方都适用。具体来说,它与 Windows 中的一些多字节支持不兼容,Windows 要求多字节字符需要一个或两个字节,而 UTF-8 则需要一到四个字节。
WriteFile()
API例如,在代码页 65001 下返回不正确的结果,该结果会通过依赖它的所有库代码冒泡,例如write()
。
已故的迈克尔·卡普兰曾在微软负责国际化事务,他有一个博客,“整理好一切”,并发表了几篇相关主题的帖子。我当时直接给他发了一封电子邮件,谈到了其中一些担忧。