UTF-8和ISO-8859-1有什么区别?
当前回答
ASCII: 7位。128码位。 iso -8859- 1:8位。256个码位。 UTF-8: 8-32位(1-4字节)。1,112,064个代码点。
ISO-8859-1和UTF-8都与ASCII向后兼容,但UTF-8与ISO-8859-1不向后兼容:
#!/usr/bin/env python3
c = chr(0xa9)
print(c)
print(c.encode('utf-8'))
print(c.encode('iso-8859-1'))
输出:
©
b'\xc2\xa9'
b'\xa9'
其他回答
ISO-8859-1 is a legacy standards from back in 1980s. It can only represent 256 characters so only suitable for some languages in western world. Even for many supported languages, some characters are missing. If you create a text file in this encoding and try copy/paste some Chinese characters, you will see weird results. So in other words, don't use it. Unicode has taken over the world and UTF-8 is pretty much the standards these days unless you have some legacy reasons (like HTTP headers which needs to compatible with everything).
UTF-8是一种多字节编码,可以表示任何Unicode字符。ISO 8859-1是一种单字节编码,可以表示Unicode的前256个字符。两者都以完全相同的方式编码ASCII。
还有一件重要的事情需要注意:如果你看到ISO -8859-1,它可能指的是Windows-1252,而不是ISO/IEC 8859-1。它们在0x80-0x9F范围内不同,其中ISO 8859-1具有C1控制代码,而Windows-1252具有有用的可见字符。
例如,ISO 8859-1使用0x85作为控制字符(在Unicode中,U+0085, ' '),而Windows-1252使用水平省略号(在Unicode中,U+2026水平省略号,…)。
WHATWG编码规范(如HTML所使用的)明确声明ISO -8859-1是windows-1252的标签,而web浏览器不以任何方式支持ISO 8859-1: HTML规范说编码规范中的所有编码都必须支持,仅此而已。
同样有趣的是,HTML数字字符引用基本上使用Windows-1252来表示8位值,而不是Unicode代码点;Per https://html.spec.whatwg.org/#numeric-character-reference-end-state, …会产生U+2026而不是U+0085。
维基百科解释得很好:UTF-8 vs Latin-1 (ISO-8859-1)。前者为变长编码,后者为单字节定长编码。 Latin-1只编码Unicode字符集的前256个码位,而UTF-8可用于编码所有码位。在物理编码级别,只有码点0 - 127编码相同;编码点128 - 255的不同之处在于,使用UTF-8时会变成2字节序列,而使用Latin-1时会变成单字节序列。
ASCII: 7位。128码位。 iso -8859- 1:8位。256个码位。 UTF-8: 8-32位(1-4字节)。1,112,064个代码点。
ISO-8859-1和UTF-8都与ASCII向后兼容,但UTF-8与ISO-8859-1不向后兼容:
#!/usr/bin/env python3
c = chr(0xa9)
print(c)
print(c.encode('utf-8'))
print(c.encode('iso-8859-1'))
输出:
©
b'\xc2\xa9'
b'\xa9'