Ign*_*ams 303
UTF-8是一种多字节编码,可以表示任何Unicode字符.ISO 8859-1是一个单字节编码,可以代表前256个Unicode字符.两者都以完全相同的方式编码ASCII.
Sam*_*tch 71
UTF是一系列多字节编码方案,可以表示Unicode代码点,可以代表最多2 ^ 31 [大约20亿]个字符.UTF-8是一种灵活的编码系统,使用1到4个字节来表示前2 ^ 21 [大约200万]个代码点.
长话短说:任何具有低于127的代码点/序数表示的字符,即7位安全的ASCII由与大多数其他单字节编码相同的1字节序列表示.代码点大于127的任何字符都由两个或更多字节的序列表示,其中特定的编码在此处进行了解释.
ISO-8859是一系列单字节编码方案,用于表示可以在127到255范围内表示的字母表.这些不同的字母表被定义为ISO-8859- n格式的"部分" ,最熟悉的这些可能是ISO-8859-1又名'Latin-1'.与UTF-8一样,无论使用何种编码系列,7位安全ASCII都不受影响.
这种编码方案的缺点是它不能容纳由超过128个符号组成的语言,或者一次安全地显示多个符号系列.同样,随着UTF的兴起,ISO-8859编码已经失宠.负责该工作组的ISO"工作组"于2004年解散,将维护工作留给其母公司小组委员会.
Shi*_*hah 16
ISO-8859-1是20世纪80年代的传统标准.它只能代表256个字符,因此只适用于西方世界的某些语言.即使对于许多支持的语言,也缺少一些字符.如果您使用此编码创建文本文件并尝试复制/粘贴一些中文字符,您将看到奇怪的结果.换句话说,不要使用它.Unicode已经占据了全世界,UTF-8几乎就是现在的标准,除非你有一些遗留的原因(比如需要与所有东西兼容的HTTP头).
Cyk*_*ker 12
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'))
Run Code Online (Sandbox Code Playgroud)
输出:
©
b'\xc2\xa9'
b'\xa9'
Run Code Online (Sandbox Code Playgroud)
要意识到的一件更重要的事情:如果您看到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 HORIZONTAL ELLIPSIS,. …)。
在WHATWG编码规范(13759 HTML)明确声明iso-8859-1是一个标签windows-1252,和Web浏览器不支持ISO 8859-1以任何方式:HTML规范说,在编码规范所有编码必须得到支持,并没有更多的.
同样有趣的是,HTML 数字字符引用本质上使用 Windows-1252 来表示 8 位值,而不是 Unicode 代码点;根据https://html.spec.whatwg.org/#numeric-character-reference-end-state,…将产生 U+2026 而不是 U+0085。
| 归档时间: |
|
| 查看次数: |
359445 次 |
| 最近记录: |