在 Windows 7 中将 UTF8 设置为默认字符编码

Baa*_*arn 69 windows windows-7 unicode utf-8

有没有办法将 Windows 7 设置为全局使用 UTF-8 作为标准?
设置每个文本编辑器都使用它真的很烦人。

jsa*_*nen 48

简短的回答是否定的,这是不可能的

详细地说,恐怕您不会在 Windows 7 中找到一个全局编码选项,它可以让您 1) 设置全局默认值,2) 您列出的所有应用程序都将遵守。

另外,我想问一下您要解决的问题是什么?

应用程序可以选择是否在内部使用 unicode 来表示数据。虽然鼓励使用 unicode,但您可能永远无法确定您的所有应用程序实际上都在内部支持它。

但是,您可以做的是更改每个列出的应用程序的默认字符编码:

  • 对于 Eclipse,可以从Windows > Preferences > General > Content Types设置新文件的默认编码(参见Eclipse Community Forms 上的帖子
  • 对于 Notepad++,导航到Settings > Preferences > New Document/Default/Directory并将编码设置为UTF-8
  • 至于 Thunderbird,我很确定它已经使用 UTF-8 作为默认编码?(请参阅有关字符编码的这些说明
  • 在 OpenOffice(和 LibreOffice)的情况下,您实际上甚至不需要关心编码,因为 OpenOffice 保存的文档基于 XML,其中编码在 XML 文件中内部指定(并且UTF-8已经是那里也是默认值)
  • 从 UTF-8 的角度来看,PowerShell 很棘手。它的默认编码为UTF-16LE.
    • 要将文件从 PowerShell 输出到 UTF-8,请参阅此答案
    • 要更改默认编码,请参阅此答案

  • 不是我希望得到的答案,但我认为我必须接受事实,谢谢 =) (4认同)

hip*_*ail 24

这是不可能的,主要是因为 Windows 不允许将 UTF-8 作为系统 ANSI 代码页,即使它确实有 UTF-8 的 ANSI 代码页,代码页 65001。这似乎有几个原因:

  • 当 Unicode 刚出现时,Microsoft 决定 UCS-2 是支持 Unicode 的最佳方式。当时 Unicode 是 16 位的。
  • Windows 对每种支持的语言都有一个 ANSI 代码页,不像 Unix 和 Linux 可以独立设置语言和编码。
  • 代码页 65001 并不适用于任何地方。具体来说,它被 Windows 中的一些多字节支持打破了,它期望多字节字符需要一两个字节,而 UTF-8 需要一到四个字节。例如,WriteFile()API在代码页 65001 下返回不正确的结果,该结果在依赖它的所有库代码中冒泡,例如write().

在微软从事国际化工作的已故迈克尔卡普兰有一个博客,“全部整理”,其中有几篇关于相关主题的帖子。那天我直接给他发了电子邮件,讨论了其中的一些问题。

  • 原因是因为 *UTF-8 语言环境可能会破坏某些函数(一个可能的例子是 _mbsrev),因为它们被编写为假设每个字符使用的多字节编码不超过 2 个字节,因此直到现在代码页具有更多字节,例如 GB 18030 ( cp54936) 和 UTF-8 无法设置为语言环境。*。但至少现在[可以在 Windows 10 上设置 UTF-8 语言环境](https://superuser.com/q/1033088/241386) (3认同)