Unicode UTF-8是编码还是字符集?

Unicode UTF-8是编码还是字符集?,unicode,encoding,utf-8,character,Unicode,Encoding,Utf 8,Character,我认为字符集的名称是“Unicode”,而“UTF-8”是Unicode字符集的特定编码的名称,但在提到UTF-8时,我经常看到术语“编码”和“字符集”互换使用 比如说, <meta charset="UTF-8"> vs Unicode标准将其称为编码形式或编码方案。Unicode只有一组字符(称为Unicode字符集或通用字符集),所有UTF编码形式和编码方案都可以对该集中的所有字符进行编码 正如许多其他术语一样,程序员似乎有一种到处滥用术语的倾向,这只是这方面的又一个例子

我认为字符集的名称是“Unicode”,而“UTF-8”是Unicode字符集的特定编码的名称,但在提到UTF-8时,我经常看到术语“编码”和“字符集”互换使用

比如说,

<meta charset="UTF-8">

vs


Unicode标准将其称为编码形式或编码方案。Unicode只有一组字符(称为Unicode字符集或通用字符集),所有UTF编码形式和编码方案都可以对该集中的所有字符进行编码

正如许多其他术语一样,程序员似乎有一种到处滥用术语的倾向,这只是这方面的又一个例子

UTF-8是编码还是字符集

UTF-8是一种编码,该术语在定义它的RFC中使用,下面引用


我经常看到术语“编码”和“字符集”互换使用

在Unicode之前,如果您想使用西里尔语或希腊语等字母表†,则需要使用仅编码该字母表中字符的编码。因此,术语编码和字符集经常被混为一谈,但它们的含义不同

不过现在,Unicode通常是您需要担心的唯一字符集,因为它包含除克林贡语之外的大多数书面语言的字符

†-字母表,一种字符集,其中字符与口语中的声音直接对应。


字符集是从代码单位(整数)到书面语言中的字符、符号、字形或其他标记的映射。Unicode是将21b整数映射到Unicode码点的字符集。Unicode联盟的描述如下:

统一码
  • 书写世界上所有语言所用字符的数字表示标准。Unicode为以任何语言存储、搜索和交换文本提供了统一的方法。它被所有现代计算机所使用,是在互联网上处理文本的基础。Unicode由Unicode联盟开发和维护:
  • 应用于Unicode联盟开发和维护的软件国际化和本地化标准的标签

  • 编码是从字符串到字符串的映射。UTF-8是一种将字节字符串(8b整数)映射到代码点字符串(21b整数)的编码。Unicode联盟将其称为a,并在中定义

    然而,最初提议的UCS编码是 与许多当前应用程序和协议不兼容,并且 导致了UTF-8的开发


    UTF-8是一种编码。然而,编码通常称为字符集,因此许多协议使用参数名称
    charset
    作为指定字符编码的参数。因此,
    charset
    只是一个标识符。

    UTF-8是一种编码,从某种意义上讲,它将一系列抽象整数(表示抽象字符的代码点)编码为一组字节。(从unicode的角度来看,您可以说“字符集”也是一种表驱动的“编码”,即将少量代码点编码为字节,但这几乎是对术语的滥用,可能没有多大帮助)

    整数序列(在某种基本意义上)是“unicode字符串”,但为了将它们保存在磁盘上或通过网络发送,需要将它们编码为字节序列。UTF-8是实现这一点的一种方法,UTF-16是另一种方法:如果一个unicode字符串以两种不同的方式编码,它将被表示为两个不同的字节流


    这里有很多很好的答案,但就在昨天,我花了一些时间试图将这个问题归结为最小的问题,因此这提供了一个很好的机会来重用该文本:

    我认为乔尔·斯波尔斯基的文章很好。这里(当然)以前提到过,但值得重复。不过,我认为这并不是完全最小的

    有几次,当我不得不向同事解释“unicode”时,抽象unicode代码点的概念被证明是解释的关键。我成功解释的结构如下:

    • Unicode联盟(经过许多痛苦和协商)设法为使用中的大部分字符提供了一个数字。这些数字(行话)称为“代码点”

    • “字母A”有一个代码点,这与字体无关。因此,“A”和“A”有不同的代码点,但罗马、粗体、斜体、衬线、无衬线(等等)没有区别。例如,日本汉字、腾战和克林贡文字都有代码点(这引起了人们的注意)

    • “unicode字符串”是(概念上)一个代码点序列。这是一个数学整数序列。询问这些是字节、2字节还是4字节的单词是没有意义的;这个序列与计算机无关

    • 然而,如果你想把这个整数序列发送给某人,或者把它保存在计算机磁盘上,你必须对它进行编码。你也可以在一张纸上写下数字的顺序,但现在让我们专门研究计算机。如果您想在计算机上存储或发送这些数据,必须将这些整数转换为字节序列。有多个过程可以实现这一点,每个过程都被命名为“编码”。其中一种“编码”是UTF-8

    • “读取Unicode文件”时,从磁盘上的字节序列开始,概念上以整数序列结束。如果“unicode文件”以某种方式表示为UTF-8编码,则必须对其进行解码
      <?xml version="1.0" encoding="UTF-8" ?>