use*_*425 32 notepad++ character-encoding ansi utf-8
我有一个用 ANSI 编码的文本:
当我尝试将其转换为 UTF-8(使用 Notepad++ 菜单编码 > UTF-8)时,我得到了一些奇怪的字符:
我认为 UTF-8 是 ANSI 的超集,我以后不会有这样的问题。无论如何,我可以避免那些奇怪角色的出现吗?
phu*_*clv 50
选择Convert to UTF-8而不是Encode in UTF-8
UTF-8是不一个字符集,只是一个编码的Unicode。前 128 个字节值与 ASCII(以及大多数其他正常字符集)相同。然而,设置了高位(或 ? 0x80)的字节是 ASCII中的扩展字符,而在 UTF-8 中它们表示多字节序列。
上面的 0x93 或 0x94 就是这种情况。如果您在 ANSI 中打开文件,它将使用当前的 Windows 代码页, 在美国和大多数西欧国家,默认情况下通常是Windows-1252。在 Windows-1252 中,这些字节是“智能引号”(或具有不同开始和结束形式的弯曲引号),您在使用诸如 MS Word 之类的富文本编辑器时经常会看到这些字节。但是,如果您选择编码 > 以 UTF-8 编码,则文件将被视为以 UTF-8 编码。如果显示错误字符1,Encode in...菜单项用于告诉 Notepad++实际编码。由于单独的 0x93 和 0x94 是格式错误的 UTF-8 多字节序列,因此它们在编辑器中保持原样
这意味着文件中没有什么奇怪的。只是你选择了错误的工具。您需要单击Convert to UTF-8将整个输入字节序列转换为选定的编码
您对ANSI和ASCII也有些困惑。ANSI 不是定义的字符集,可以表示任何代码页,尽管它通常指的是Windows-1252。Windows-1252 是ISO-8859-1(AKA Latin-1)的超集,而 ISO-8859-1 是 Unicode 的前 256 个代码点。ASCII 是 7 位字符集,是几乎所有以 8 位或更多位编码的 ANSI 代码页的子集。它有时也被称为 ANSI,虽然不是很正确
一般来说,主要字符集之间的关系如下
ASCII < ISO-8859-1 < Windows-1252
^
Unicode
Run Code Online (Sandbox Code Playgroud)
1这个不幸的事实发生是因为文本文件中没有嵌入编码信息,我们必须猜测,但不可能每次都正确猜测,问题确实发生了,就像著名的布什隐藏了事实错误一样。看
由于历史原因,Windows 同时处理 ANSI 和 Unicode 文本文件。因此,为了区分它们,它必须使用字节顺序标记作为一种签名来表示它是具有特定编码的文本文件。尽管名称如此,但它并不是真正用于“字节顺序”标记目的,因为 Unix 人员总是声称它纯粹是一个签名。拥有签名实际上是一件好事,每一种正确的二进制文件格式都可以做到这一点。如果没有 BOM 签名,则编码为 ANSI,否则为 Unicode。由于现在 Unices 总是使用 UTF-8 并且实际上不必使用多种文本编码,因此通常不会像在 Windows 上那样出现问题