有人可以解释一下 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。
但是,记事本为您提供了“编码”选项,包括ANSI
、Unicode
和Unicode big-endian
UTF-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
。 - 关闭记事本。
- 重新打开文档(例如,使用
Start
、My 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 版本上测试)
- 将具有良好编码的文件复制
TXTUTF-8.txt
到C:\WINDOWS\SHELLNEW
。 - 创建
HKEY_CLASSES_ROOT\.txt\ShellNew
一个名为“FileName
”的新链 - 将“ ”的值更改
FileName
为“TXTUTF-8.txt
”
现在,当你使用 Windows 菜单创建一个新的 txt 文件时,它将以你的TXTUTF-8.txt
作为模板