Jas*_*n C 6 windows-7 unicode text-editors
我有两个文本文件,我提供下载链接而不是 pastebin 来精确保存它们的内容:
这两个文本文件都只包含空格、回车符、换行符和字母 X,并且它们应该是 ASCII 编码的。这两个文件之间的唯一区别是第二个文件删除了前导和尾随空白行,并删除了每行上的一些前导和尾随空格。
第一个文件没有引起任何问题。出于某种原因,我的文本编辑器将第二个文件检测为 UTF-8:
在 Notepad++ 中,即使我选择“转换为 ANSI”并保存文件,保存的文件与原始文件逐字节相同,两个编辑器仍将其检测为 UTF-8!
两个编辑器对第一个文件都没有问题,并正确地将其识别为 ASCII(或 ANSI)。
我在十六进制编辑器中查看了第二个文本文件。事实上,它不是从 BOM 开始的。文件的前几个字节20 20 20 20 20 20 20 20应该是 ,因为它以空格开头:
我的问题是:那么,为什么 Notepad 和 Notepad++ 都将第二个文件检测为 UTF-8?鉴于该文件没有 BOM 标头,为什么会发生这种情况,与导致此问题的第一个文件相比,第二个文件有何独特之处?我无法弄清楚发生了什么。
这两个文件都是有效的 ASCII和UTF-8,因为它们只包含 <0x7F 的代码点(换句话说,没有一个字节的值大于 127)。
我的猜测是 Notepad++ 和 Notepad 具有不同的启发式[如果多个编码有效]:
N++ 更喜欢 UTF-8,
记事本(Win 实用程序)似乎查看文件长度 - 如果它是偶数(作为您的第二个文件,它是 72 320 字节)而不是将其视为 UTF-16(本机 Windows 编码,主要是 2 个字节[并非总是如此,但它是可能是从早期的 UCS-2 继承下来的,它总是两个字节]),如果它是奇数(作为您的第一个文件 - 78 045 个字节),则将其视为 ASCII(单字节)。
您可以通过在第一个文件的末尾添加单个空格(或任何其他有效的 ascii 字符)来测试它以使长度均匀 - 如果您在记事本中打开它,它将假定它是 Unicode 并显示“垃圾”
顺便说一句:这两个文件在我的 PC 上的 Notepad++ 中都被识别为 utf-8
| 归档时间: |
|
| 查看次数: |
796 次 |
| 最近记录: |