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 记事本如何解释字符?的主要内容,如果未能解决你的问题,请参考以下文章

记事本怎么知道用啥编码解释txt文件?

linux下转windows字符串----如果windows下的记事本在linux下是一堆乱码怎么办

cmd如何编译记事本中的代码

Windows不要使用记事本编辑文本文件

用记事本打开csv文件乱码怎么办

为啥记事本每次保存都说该文件含有unicode格式的字符?