Windows 7 UTF-8 和 Unicode

Windows 7 UTF-8 和 Unicode

有人可以解释一下 Windows 7(Pro 64 位)有什么变化吗?

详细信息:以前我使用的是 Windows XP,并且有一些 CSV 格式的翻译文件(UTF-8 编码)。我可以在记事本和 Excel 中查看字体。升级到 Windows 7 后,当我打开这些文件时,我看到的只是方框(你知道,如果我在浏览器中打开它们,我可以看到所有的翻译)。如果我以 Unicode 格式保存这些文件,一切似乎都很好。

那么,到底发生了什么?为什么 Windows 7 可以使用 Unicode,而不能使用 UTF-8?

答案1

为什么 Windows 7 可以使用 Unicode 而不可以使用 UTF-8?

术语

统一码UTF-8不是同一类东西:Unicode 是字符集它定义了一组字符(一个字符集),并为每个字符分配数字(代码点)。UTF-8 是几个编码可以用来代表磁盘上或传输中的 Unicode 字符流。例如,同一 Unicode 字符流也可以编码为 UTF-16、UTF-32 或 UTF-7。

但是,记事本为您提供了“编码”选项,包括ANSIUnicodeUnicode big-endianUTF-8内容的 Microsoft 开发人员使用了错误的术语。当他们说“Unicode”时,他们很可能是指“UTF-16 小端“。当他们说“ANSI”时,他们的意思是代码页 1252(CP-1252)。

微软记事本

我相信微软的记事本用字节顺序标记写入 UTF-16(物料清单),并且记事本在读取文本文件时会查找 BOM。BOM 会告知应用程序该文件是 UTF-16 格式,并指示它是大端字节序还是小端字节序。

如果记事本找不到 BOM,它会调用库函数IsTextUnicode,它会查看数据并尝试猜测使用了哪种编码。有时(不可避免地)它会猜错。有时它会猜测“ANSI”文件是“Unicode”。尝试将 UTF-16 或 UTF-8 文件解释为代码页 1252 会导致它显示错误的字形,并且无法找到字形来呈现某些 8 位值 - 这些值将显示为方块。

正如 harrymc 所说他的回答,有比记事本更好的替代品。但记事本允许您在打开文件时明确选择编码(而不是让记事本尝试猜测)。

字节顺序标记

根据 Unicode 联盟的规定,字节顺序标记 (BOM) 是可选的。但是,Windows 依靠 BOM 来区分某些编码。

简而言之,也许您的文件由于某种原因缺少 BOM?也许 BOM 在升级过程中丢失了?

如果您仍然有显示为正方形的原始文件,您可以对它们进行十六进制转储以查看它们是否包含 BOM。


纯文本文件标准

问题是,没有任何– 纯文本文件没有通用标准。相反,我们面临许多不兼容和未知问题。

  • 行尾如何标记?有些平台使用控制字符回车符 (CR),后跟换行符 (LF),有些平台仅使用 CR,有些平台仅使用 LF。

  • 以上是终止符还是分隔符?这会影响文件末尾,并且已知会导致问题。

  • 制表符和其他控制字符的处理。我们可能假设制表符用于从行首开始对齐到 8 个标准字符宽度的倍数,但实际上并不确定。许多程序允许更改制表符的位置。

  • 字符集和编码?没有通用标准来表明文件中的文本使用了哪些字符集和编码。我们最接近的方法是查找 BOM 的存在,这表明编码是用于 Unicode 的编码之一。从 BOM 值中,读取文件的程序可以区分 UTF-8 和 UTF-16 等,以及 UTF-16 的 Little-Endian 和 Big-Endian 变体等。没有通用标准来表明文件是用任何其他流行编码(如 CP-1252 或 KOI-8)编码的。

等等。上述元数据均未写入文本文件 - 因此最终用户在读取文件时必须通知程序。最终用户必须知道任何特定文件的元数据值,否则其程序可能会使用错误的元数据值。

布什隐瞒了事实

在 Windows XP 上尝试此操作。

  • 打开记事本。
  • 将字体设置为 Arial Unicode MS。(您可能需要先安装它;如果您在菜单中没有看到它,请单击“显示更多字体”。)
  • 输入文本“布什隐瞒了事实”。
  • 选择Save As。从Encoding菜单中选择ANSI
  • 关闭记事本。
  • 重新打开文档(例如,使用StartMy Recent Documents)。
  • 你会看到“布什隐瞒了事实”而不是“布什桳发摩琠敨映射捡获”。

这说明IsTextUnicode记事本使用的函数错误地猜测 ANSI(实际上是代码页 1252)文本是没有 BOM 的 Unicode UTF-16LE。保存为 的文件中没有 BOM ANSI

Windows 7的

随着 Windows 7 的推出,微软进行了调整IsTextUnicode以避免上述情况发生。在没有 BOM 的情况下,现在更有可能猜测 ANSI (CP 1252) 而不是 Unicode (UTF-16LE)。因此,在 Windows-7 中,我预计你会更多的可能会出现相反的问题:包含代码点大于 255 但没有 BOM 的 Unicode 字符的文件现在更有可能被猜测为 ANSI - 因此显示不正确。

防止编码问题

目前,最好的方法似乎是到处都使用 UTF-8。理想情况下,你应该将所有旧文本文件重新编码为 UTF-8,并且只将文本文件保存为 UTF-8。有以下工具:重新编码图标这可以帮助解决这个问题。

答案2

备注:您可以使用记事本++使用编码菜单来查看这些文件。

一旦文件正确显示,保存它们将添加正确的 BOM。

答案3

在 Windows 10 中是可能的(在 1903 版本上测试)

  1. 将具有良好编码的文件复制TXTUTF-8.txtC:\WINDOWS\SHELLNEW
  2. 创建HKEY_CLASSES_ROOT\.txt\ShellNew一个名为“ FileName”的新链
  3. 将“ ”的值更改FileName为“ TXTUTF-8.txt

现在,当你使用 Windows 菜单创建一个新的 txt 文件时,它将以你的TXTUTF-8.txt作为模板

来源 :https://answers.microsoft.com/fr-fr/windows/forum/all/configurer-lencodage-par-d%C3%A9faut-en-utf-8-dans/9c0358ca-a2b3-43e8-a154-d10c1fe94317

相关内容