Ign*_*ams 303

UTF-8是一种多字节编码,可以表示任何Unicode字符.ISO 8859-1是一个单字节编码,可以代表前256个Unicode字符.两者都以完全相同的方式编码ASCII.

  • 有一点需要注意,ASCII只能从0扩展到127.MSB始终为0. (8认同)
  • @RohanBhale 不要使用短语“扩展 ASCII”;这只会造成混乱。 (5认同)
  • 当定义了 127 以上的代码点时,编码系统是扩展 ASCII 的版本。 (3认同)

Sta*_*Man 126

维基百科解释得非常好:UTF-8Latin-1(ISO-8859-1).前者是可变长度编码,后者是单字节固定长度编码.Latin-1仅编码Unicode字符集的前256个代码点,而UTF-8可用于编码所有代码点.在物理编码级别,只有代码点0 - 127被编码相同; 代码点128 - 255的不同之处在于,使用UTF-8成为2字节序列,而它们是使用Latin-1的单字节.


Sam*_*tch 71

UTF

UTF是一系列多字节编码方案,可以表示Unicode代码点,可以代表最多2 ^ 31 [大约20亿]个字符.UTF-8是一种灵活的编码系统,使用1到4个字节来表示前2 ^ 21 [大约200万]个代码点.

长话短说:任何具有低于127的代码点/序数表示的字符,即7位安全的ASCII由与大多数其他单字节编码相同的1字节序列表示.代码点大于127的任何字符都由两个或更多字节的序列表示,其中特定的编码在此处进行了解释.

ISO-8859

ISO-8859是一系列单字节编码方案,用于表示可以在127到255范围内表示的字母表.这些不同的字母表被定义为ISO-8859- n格式的"部分" ,最熟悉的这些可能是ISO-8859-1又名'Latin-1'.与UTF-8一样,无论使用何种编码系列,7位安全ASCII都不受影响.

这种编码方案的缺点是它不能容纳由超过128个符号组成的语言,或者一次安全地显示多个符号系列.同样,随着UTF的兴起,ISO-8859编码已经失宠.负责该工作组的ISO"工作组"于2004年解散,将维护工作留给其母公司小组委员会.

  • +1用于回答问题,但超越并提供有关相关编码的信息。回复:UTF-8 的代码点,根据 /sf/answers/2694185091/,UTF-8 支持 2^21 代码点。这是一个错误,还是需要修复? (2认同)

Shi*_*hah 16

ISO-8859-1是20世纪80年代的传统标准.它只能代表256个字符,因此只适用于西方世界的某些语言.即使对于许多支持的语言,也缺少一些字符.如果您使用此编码创建文本文件并尝试复制/粘贴一些中文字符,您将看到奇怪的结果.换句话说,不要使用它.Unicode已经占据了全世界,UTF-8几乎就是现在的标准,除非你有一些遗留的原因(比如需要与所有东西兼容的HTTP头).

  • Umlaut在utf8中以两个字符表示。他们可以很好地转换并很好地工作。问题来自期望每个字符1个字节的程序。对于这些旧程序,ISO-8859-1具有1字节的umlaut。 (4认同)
  • “所以换句话来说,不要使用它。” 我之所以这么说,是因为在某些用例中,ISO-8859-1 比 UTF-8 更适合,因为单字节和 256 个字符就足够了,从而实现更快的处理和更少的负载。 (2认同)

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)


Chr*_*gan 5

要意识到的一件更重要的事情:如果您看到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。