【问题标题】:ASCII vs Unicode + UTF-8ASCII 与 Unicode + UTF-8
【发布时间】:2023-11-18 06:41:01
【问题描述】:

正在阅读Joel Spolsky's 'The Absolute Minimum' about character encoding。 我的理解是 ASCII 是 Code-point + Encoding 方案,而在现代,我们使用 Unicode 作为 Code-point 方案,使用 UTF-8 作为 Encoding 方案。这是正确的吗?

【问题讨论】:

标签: unicode utf-8 character-encoding ascii


【解决方案1】:

在现代,ASCII 现在是 UTF-8 的子集,而不是它自己的方案。 UTF-8 向后兼容 ASCII。

【讨论】:

  • 好的。在 UTF-8 之前,ASCII 是一种组合的代码点+编码系统吗?我只是问,因为我想了解 ASCII 系统是如何演变的。
  • ASCII 定义了代码点值(在 Unicode 出现之前它们不被称为代码点)0-127,但它没有定义它们的编码。所有语言编码的前 128 个字符都使用与 ASCII 相同的值。 UTF-8、ISO 编码、拉丁编码等都是支持 ASCII 值的 8 位编码。 UTF-16 和 UTF-32 是 16/32 位编码,也支持 ASCII 值。给定编码中的代码点值及其编码的代码单元值是两个独立的东西。
  • 有点。 ASCII 技术上仅定义前 7 位。但是大多数 ASCII + 代码页方案都有额外的 128 个字符,例如 Windows (1252) 或 Mac OS Roman (10000)。这些都被称为“ASCII”,但如果超过 127,UTF-8 与它们中的任何一个都不匹配。
  • @PRMan 这些通常都被称为 ANSI 编码(即使它们实际上不是由 ANSI 定义的),而不是 ASCII。大多数开发人员都知道 ASCII 只有 7 位,因此仅涵盖字符 0-127、128-255 由 ANSI 处理,超出范围由 Unicode 处理。
  • 在*上查找 ATASCII。它被称为 Atari 8 位计算机的“非标准 ASCII”。文章中没有术语“ANSI 编码”。但它被称为 ASCII,尽管这篇文章主要是关于差异的。与 ascii-table.com 相同,除了底部的搜索词外,未提及 ANSI。事实上,ascii-table.com 称 ANSI 是“在 Windows 社区中持续存在的误称”
【解决方案2】:

是的,除了 UTF-8 是 一种 编码方案。其他编码方案包括 UTF-16(具有两种不同的字节顺序)和 UTF-32。 (有些混淆,UTF-16 方案在 Microsoft 软件中称为“Unicode”。)

确切地说,定义 ASCII 的美国国家标准将字符集合及其编码指定为 7 位数量,而没有指定以字节为单位的特定传输编码。过去,它以不同的方式使用,例如以便将五个 ASCII 字符打包到一个 36 位存储单元中,或者使 8 位字节将额外的字节用于检查目的(奇偶校验位)或传输控制。但是现在使用 ASCII,以便将一个 ASCII 字符编码为一个 8 位字节,其中第一位设置为零。这是事实上的标准编码方案,并包含在大量规范中,但严格来说不是 ASCII 标准的一部分。

【讨论】:

  • 那么 ASCII 和 UTF-7 一样吗?
  • 原因是MS引入Unicode支持时,UTF-8并不存在,UCS-2是唯一的编码。因此,当 Unicode 2.0 发布时,他们唯一的方法就是转向 UTF-16