Answers:
为什么Windows 7使用Unicode而不使用UTF-8?
Unicode和UTF-8并不是同一类东西:Unicode是一个字符集,它定义了一组字符(一个库)并为每个字符分配数字(代码点)。UTF-8是可用于表示磁盘上或传输中的Unicode字符流的几种编码之一。例如,相同的Unicode字符流也可以编码为UTF‑16,UTF‑32或UTF‑7。
但是,你“编码”选项,包括记事本提供ANSI
,Unicode
,Unicode big-endian
和UTF-8
。撰写此内容的Microsoft开发人员使用了错误的术语。当他们说“ Unicode”时,最有可能是“ UTF-16
little-endian ”。当他们说“ ANSI”时,它们表示代码页1252(CP-1252)。
我相信Microsoft的Notepad用字节顺序标记(BOM)编写UTF-16,并且该Notepad在读取文本文件时会查找BOM。BOM会告知应用程序该文件为UTF-16,并指示该文件是big-endian还是little-endian。
如果记事本找不到BOM表,则会调用一个库函数IsTextUnicode
,该函数查看数据并尝试猜测使用了哪种编码。有时(不可避免)它猜错了。有时,它会猜测“ ANSI”文件是“ Unicode”。尝试将UTF-16或UTF-8文件解释为代码页1252将导致其显示错误的字形,并且无法找到可渲染某些8位值的字形-然后,这些字形将显示为正方形。
正如harrymc在回答中所说的,记事本有更好的选择。但是,记事本使您可以在打开文件时明确选择编码(而不是离开记事本进行猜测)。
根据Unicode联盟,字节顺序标记(BOM)是可选的。但是,Windows依靠BOM来区分某些编码。
简而言之,也许是由于某种原因您的文件缺少BOM?BOM可能在升级过程中的某个时间丢失了吗?
如果仍然有原始文件显示为正方形,则可以对其进行十六进制转储,以查看它们是否包含BOM。
问题在于,实际上没有任何东西 –没有针对纯文本文件的通用标准。相反,我们有许多不兼容和未知数。
线尾如何标记?一些平台使用控制字符回车(CR),然后使用换行(LF),一些平台仅使用CR,而某些则单独使用LF。
以上是终止符还是分隔符?这在文件末尾起作用,并且已知会引起问题。
选项卡和其他控制字符的处理。我们可能会假设使用制表符从行的开头对齐8个标准字符宽度的倍数,但实际上并不确定。许多程序允许更改制表符位置。
字符集和编码?没有通用标准来指示文件中的哪些已用于文本中。最接近的是寻找BOM的存在,该BOM指示编码是用于Unicode的编码之一。从BOM值中,读取文件的程序可以区分UTF-8和UTF-16等,以及UTF-16的Little-Endian和Big-Endian变体,等等。没有通用的标准来指示文件以其他任何流行的编码方式(例如CP-1252或KOI-8)进行编码。
等等。以上元数据均未写入文本文件-因此,最终用户在读取文件时必须通知程序。最终用户必须知道任何特定文件的元数据值,否则冒着其程序将使用错误的元数据值的风险。
在Windows XP上尝试此操作。
Save As
。从Encoding
菜单中选择ANSI
。Start
,My Recent Documents
)。这说明IsTextUnicode
记事本使用的功能错误地猜测ANSI(真正的代码页1252)文本是不带BOM的Unicode UTF-16LE。另存为的文件中没有BOM ANSI
。
对于Windows 7,Microsoft进行了调整IsTextUnicode
,以使上述情况不会发生。在没有BOM的情况下,现在比Unicode(UTF-16LE)更可能猜测ANSI(CP 1252)。使用Windows-7我希望,因此你更可能有相反的问题:包含Unicode字符的代码点大于255的文件,但没有BOM,现在更容易被猜测为ANSI -因此显示不正确。
当前,最好的方法似乎是在各处使用UTF-8。理想情况下,您将所有旧文本文件重新编码为UTF-8,并且仅将文本文件另存为UTF-8。有一些工具,例如recode和iconv可以帮助解决这个问题。
isTextUnicode
。您能否创建一个小的示例文件来说明包含BOM的文件存在的问题?
this app can break
对同样的效果Bush hid the facts
在Windows 10中是可能的(在1903年版本上测试)
TXTUTF-8.txt
到C:\WINDOWS\SHELLNEW
。HKEY_CLASSES_ROOT\.txt\ShellNew
创建名称为“ FileName
” 的新链条时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