Windows 记事本如何解释字符?
Posted
技术标签:
【中文标题】Windows 记事本如何解释字符?【英文标题】:How does Windows Notepad interpret characters? 【发布时间】:2011-10-09 19:18:14 【问题描述】:我想知道 Windows 是如何解释字符的。
我用十六进制编辑器制作了一个文件,其中包含 3 个字节 E3 81 81
。
这些字节是 UTF-8 中的 ぁ
字符。
我打开记事本,它显示ぁ
。我没有指定文件的编码,我只是创建了字节并且记事本正确解释了它。
记事本是否以某种方式猜测编码? 还是十六进制编辑器使用特定编码保存这些字节?
【问题讨论】:
【参考方案1】:如果文件只包含这三个字节,则根本没有关于使用哪种编码的信息。
一个字节只是一个字节,没有办法在其中包含任何编码信息。此外,十六进制编辑器甚至不知道您打算将数据解码为文本。
记事本通常使用 ANSI 编码,因此如果它以 UTF-8 格式读取文件,则必须根据文件中的数据猜测编码。
如果您将文件保存为 UTF-8,记事本会将 BOM(字节顺序标记)EF BB BF
放在文件开头。
【讨论】:
是的,但我没有将文件保存为 UTF-8 或其他格式,我创建了字节。谢谢 @Guffa,这个答案是错误的,伙计。他使用 HxD 创建了该文件。该文件只有 3 个字节,没有 BOM。然而记事本没有用 ascii 文本打开它,它是用 UTF8 文本打开的?记事本是怎么知道的?【参考方案2】:记事本做出有根据的猜测。我不知道细节,但加载前几千字节并尝试从 UTF-8 转换它们非常简单,所以它可能会做类似的事情。
【讨论】:
【参考方案3】:...有时它会出错... https://ychittaranjan.wordpress.com/2006/06/20/buggy-notepad/
【讨论】:
【参考方案4】:有一种简单有效的方法可以检查文件是否为 UTF-8。参见***:http://en.wikipedia.org/w/index.php?title=UTF-8&oldid=581360767#Advantages,第四个要点。记事本可能会使用这个。
Wikipedia 声称 Notepad 使用了 IsTextUnicode 函数,该函数检查特定文本是否以 UTF-16 编写(它可能在 Windows Vista 中停止使用它,修复了“布什隐藏事实”错误):http://en.wikipedia.org/wiki/Bush_hid_the_facts .
【讨论】:
布什在这里隐藏了事实似乎对我不起作用...赢得 8.1。然而提问者的代码有效。【参考方案5】:如何识别文件是采用哪种编码方式......?
转到文件并尝试另存为...,您可以看到文件的默认(当前)编码(保存时使用的编码)。
【讨论】:
以上是关于Windows 记事本如何解释字符?的主要内容,如果未能解决你的问题,请参考以下文章