带有拉丁字符的 charSet 的 ANSI 文件

带有拉丁字符的 charSet 的 ANSI 文件

我对编码/字符集有疑问。

我做了一个测试。在 Notepad++ 中输入字符串“TEST Á”(不带引号),并使用 ANSI 编码。

“对于 ASCII 字符(例如数字 0-9 以及英文字母 az 和 AZ),ANSI 字符集都是相同的”(http://www.firstobject.com/convert-ansi-file-to-unicode.htm

令我惊讶的是,notepad++ 正常保存了文件,我可以在 notepad++ 上正常读取它,并使用 Ansi 编码进行加重。

其他测试,我用HxD打开了同一个文件(http://mh-nexus.de/en/hxd/),我的文件也是正确的,文件末尾有拉丁字符“Á”。参见下面的十六进制:

54 45 53 54 20 C1 -> 测试 Á

我认为应该使用 UTF-8 编码来实现这一点,但这不是必需的。

谁能向我解释这是如何可能的?

答案1

您可以使用任何字符集和任何编码来创建文件并查看它。

您只需确保在查看时使用与写入文件时相同的设置和编码。

大多数字符集实际上有很大的重叠。例如,大多数字符集(不包括 EBCDIC 和其他字符集)的 ASCII 字符集与 ASCII 位于相同的位置(即具有相同的代码点)。因此,您可以使用 UTF-8 编码在 Unicode 字符集中编写文件,只要文件仅包含 ASCII 中的字符,您就可以使用 Windows Latin-1 编码查看该文件。

注意:微软对“ANSI”和“Unicode”等术语的使用非常马虎。


更新:

首先,你应该注意Jukka 的回答Jukka 是这个主题

至于你的 Á,请参阅此摘录这里

Dec Hex ASC PC  437 850 Win Lat1    Uni
192 00C0        └   └   └   À   À   À
193 00C1        ┴   ┴   ┴   Á   Á   Á
194 00C2        ┬   ┬   ┬   Â   Â   Â
195 00C3        ├   ├   ├   Ã   Ã   Ã
196 00C4        ─   ─   ─   Ä   Ä   Ä
197 00C5        ┼   ┼   ┼   Å   Å   Å

请注意,Á 在 Windows Latin-1、ISO 8859-1 Latin 1 和 Unicode / ISO 10646 中位于代码点 194 (0xC1)。如果您在 Windows Latin-1 中写入 Á,则可以将其视为 ISO 8859-1。

如果你尝试将其读取为 Unicode,则会遇到问题,因为 Unicode 编码使用多个字节来表示该字符,


# echo $LANG
en_US.UTF-8

# cat t
TEST Á

# hexdump -C t
00000000  54 45 53 54 20 c3 81 0a                           |TEST ...|
00000008

请注意,Á(Unicode 代码点 00C1)在 UTF-8 中编码为 c3 81

答案2

Notepad++ 中的默认编码称为“ANSI”,没有明确说明;这可能意味着窗户-1252,或者它可能意味着任何 8 位编码都是系统的本机 8 位编码(在您的例子中,它可能是 windows-1252)。“ANSI”是 Microsoft 对其 8 位编码的误称,其中一种(现在称为 windows-1252)很久以前就已提交给美国国家标准协会审批 - 但遭到拒绝。

在 windows-1252 编码中输入“Á”没有问题。当然,Notepad++ 也显示正常。许多其他程序也是如此。

例如,如果您想输入“Ć”,则需要 UTF-8。许多人即使现在不需要 windows-1252 以外的字符,也会使用 UTF-8,以避免以后添加新字符时需要更改编码。

相关内容