【问题标题】:What is the difference between charsets and character encoding字符集和字符编码有什么区别
【发布时间】:2011-01-28 23:45:58
【问题描述】:

字符集和字符编码有什么区别?当我说我使用的是 utf-8 编码时,我的字符集是什么?是否默认采用 unicode 作为字符集?

【问题讨论】:

标签: unicode character-encoding


【解决方案1】:

根据Unicode terminology

  • ACR:抽象字符库 = 要编码的字符集,例如一些字母或符号集
  • CCS:编码字符集 = 从抽象字符库到一组非负整数的映射
  • CEF:字符编码表 = 来自作为 a 元素的一组非负整数的映射 CCS 到一组特定宽度的特定代码单元序列,例如 32 位整数
  • CES:字符编码方案 = 从一组代码单元序列的可逆转换(从一个或多个 CEF 到序列化的字节序列)
  • CM:字符映射 = 从抽象字符库的成员序列到在单个操作中桥接所有四个级别的序列化字节序列的映射
  • TES:传输编码语法 = 编码数据的可逆变换,可能包含也可能不包含文本数据

像 MIME 这样的旧协议在真正表示“字符编码方案”时使用“字符集”。最初,不同的字符编码被认为是独立的字符库,而不是 Unicode 的子集。

【讨论】:

    【解决方案2】:

    UTF-8 是 Unicode 字符集的编码。因此,如果您使用 UTF-8,则字符集是 Unicode,但您不必在任何地方单独指定它。 Unicode 的另一个主要编码是 UTF-16,它没有放入 8 位字节流,因为它包含零字节。如果你在处理字节序列中的 Unicode,它肯定被编码为 UTF-8。

    除了 Unicode,字符集通常被认为具有单一的固定编码,然后字符集、字符集、代码页、编码等术语通常可以互换使用,或者取决于供应商。这很草率,但不会产生运行时问题。

    我能想到的唯一可能的例外是东亚:JIS 和 EUC 最初为同一个字符集定义了多种编码,但在今天的实践中,每种编码都被单独处理。

    【讨论】:

    • 还有更多的例外:IBM037 和 IBM500 的字符库与 ISO-8859-1 完全相同,但顺序完全不同。
    • 很抱歉错过了这一点,EBCDIC 是一个我很少想到的完全不同的宇宙。至少,如果您将 EBCDIC 与基于 ASCII 的编码混淆,即使是英文文本,您也会得到垃圾,并且必须立即修复它,而不是将其作为外国用户和 i18n 开发人员的定时炸弹。
    【解决方案3】:

    字符集:定义哪个字符有哪个数字代码点(ascii、jis、unicode)

    编码:定义数字代码点的物理表示方式(utf、ucs、shiftjis)

    【讨论】:

      【解决方案4】:

      字符集定义了数字和字符之间的映射。几乎所有的字符集都说 65 是 A,并且一般都同意最多 127 的数字的映射。但是当涉及到 127 以上的数字时,它们可能有不同的立场。

      有很多字符集

      • EBCDIC
      • 双字节字符集
      • ANSI
      • 不同的 OEM 字符集
      • Unicode,努力创建一个单一的字符集,其中包括地球上所有合理的书写系统以及一些虚构的系统,如克林贡语。

      当您说字符编码时,您指的是 Unicode 代码点(一个字符)在内部是如何存储的。

      • 在 UTF-8 编码中,从 0 到 127 的每个代码点都存储在一个字节中。只有 128 及以上的代码点使用 2、3 存储,实际上最多 6 个字节。
      • 有一种叫做 UTF-7 的东西,它很像 UTF-8,但保证高位始终为零
      • 传统编码有数百种,只能正确存储部分码点,而将其他所有码点变为问号。一些流行的英文文本编码包括 Windows-1252(西欧语言的 Windows 9x 标准)和 ISO-8859-1,即 Latin-1(也适用于任何西欧语言)。
      • UTF 7、8、16 和 32 都具有能够正确存储任何代码点的优良特性。

      这篇文章几乎完全基于 Joel Spolsky 在 Unicode 上的帖子:The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets。阅读它以获得更好的想法。

      【讨论】:

        【解决方案5】:

        【讨论】:

        • 那为什么我们在xmls中有两个属性呢?字符集和编码
        • 它们不是同义词。查看其他答案。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-11-13
        • 1970-01-01
        • 1970-01-01
        • 2017-06-26
        • 2011-02-26
        相关资源
        最近更新 更多