这个问题在这里已经有了答案:UTF-8 和 Unicode 有什么区别? (18 个回答) 5 年前关闭。
考虑:
https://i.stack.imgur.com/3ayWh.jpg
unicode=utf16
是真的吗?
许多人说 Unicode 是一种标准,而不是一种编码,但实际上大多数编辑器都支持另存为 Unicode 编码。
正如 Rasmus 在他的文章 "The difference between UTF-8 and Unicode?" 中所说:
如果被问到“UTF-8 和 Unicode 有什么区别?”这个问题,您会自信地回答一个简短而准确的答案吗?在国际化的这些日子里,所有开发人员都应该能够做到这一点。我怀疑我们中的许多人并不像我们应该理解的那样理解这些概念。如果你觉得你属于这个群体,你应该阅读这个关于字符集和编码的超简短介绍。实际上,比较 UTF-8 和 Unicode 就像比较苹果和橘子: UTF-8 是一种编码 - Unicode 是一个字符集 字符集是具有唯一数字的字符列表(这些数字有时称为“代码点” )。例如,在 Unicode 字符集中,A 的数字是 41。另一方面,编码是一种将数字列表转换为二进制以便可以存储在磁盘上的算法。例如,UTF-8 将像这样转换数字序列 1、2、3、4: 00000001 00000010 00000011 00000100 我们的数据现在被转换为二进制,现在可以保存到磁盘。现在全部放在一起 假设一个应用程序从磁盘读取以下内容: 1101000 1100101 1101100 1101100 1101111 该应用程序知道该数据表示一个用 UTF-8 编码的 Unicode 字符串,并且必须将其作为文本显示给用户。第一步,是将二进制数据转换为数字。该应用程序使用 UTF-8 算法对数据进行解码。在这种情况下,解码器返回: 104 101 108 108 111 由于应用程序知道这是一个 Unicode 字符串,它可以假设每个数字代表一个字符。我们使用 Unicode 字符集将每个数字转换为相应的字符。结果字符串是“你好”。结论 因此,当有人问您“UTF-8 和 Unicode 有什么区别?”时,您现在可以自信地简短而准确地回答:UTF-8(Unicode 转换格式)和 Unicode 无法比较。 UTF-8 是一种用于将数字转换为二进制数据的编码。 Unicode 是用于将字符转换为数字的字符集。
大多数编辑器实际上支持另存为“Unicode”编码。
这是 Windows 犯下的不幸的错误命名。
因为 Windows 在内部使用 UTF-16LE 编码作为 Unicode 字符串的内存存储格式,所以它认为这是 Unicode 文本的自然编码。在 Windows 世界中,有 ANSI 字符串(当前机器上的系统代码页,完全不可移植)和 Unicode 字符串(内部存储为 UTF-16LE)。
这一切都是在 Unicode 的早期设计的,在我们意识到 UCS-2 还不够,在 UTF-8 发明之前。这就是为什么 Windows 对 UTF-8 的支持很差的原因。
这种误导的命名方案成为用户界面的一部分。使用 Windows 的编码支持来提供一系列编码的文本编辑器会自动且不恰当地将 UTF-16LE 描述为“Unicode”,将 UTF-16BE(如果提供)描述为“Unicode big-endian”。
(其他自己进行编码的编辑器,比如 Notepad++,没有这个问题。)
如果它让您感觉更好,“ANSI”字符串也不基于任何 ANSI 标准。
没那么简单。
UTF-16 是一种 16 位的可变宽度编码。简单地称其为“Unicode”是模棱两可的,因为“Unicode”指的是一整套字符编码标准。 Unicode 不是编码!
http://en.wikipedia.org/wiki/Unicode#Unicode_Transformation_Format_and_Universal_Character_Set
这里显示了很多误解。 Unicode 不是一种编码,但无论如何,Unicode 标准主要致力于编码。
ISO 10646 是您(可能)关心的国际字符集。它定义了一组命名字符(例如,“拉丁大写字母 A”或“希腊小写字母 alpha”)和一组代码点(分配给每个字符的数字——例如,61 十六进制和 3B1 十六进制)之间的映射。这两个分别;对于 Unicode 代码点,标准符号是 U+0061 和 U+03B1)。
有一次,Unicode 定义了自己的字符集,或多或少是 ISO 10646 的竞争对手。那是一个 16 位字符集,但不是 UTF-16;它是 UTF-16。它被称为UCS-2。它包括一种颇具争议的技术,试图将必要字符的数量保持在最低限度(汉族统一——基本上将非常相似的中文、日文和韩文字符视为同一个字符)。
从那时起,Unicode 联盟就默许这行不通,现在主要专注于编码 ISO 10646 字符集的方法。主要方法是 UTF-8、UTF-16 和 UCS-4(又名 UTF-32)。那些(UTF-8 除外)也有 LE(小端)和 BE(大端)变体。
就其本身而言,“Unicode”可以指代几乎所有上述内容(尽管我们可能可以消除它明确显示的其他内容,例如 UTF-8)。 “Unicode”的不合格使用可能最常发生在 Windows 上,它几乎肯定是指 UTF-16。当 UCS-2 流行时,Windows NT 的早期版本采用了 Unicode。在 UCS-2 被宣布过时(在 Win2k 左右,如果没记错的话),他们切换到 UTF-16,它与 UCS-2 最相似(事实上,它对于“基本多语言平面”中的字符是相同的,它涵盖了很多,包括大多数西欧语言的所有字符)。
UTF-16 和 UTF-8 都是 Unicode 的编码。它们都是 Unicode;一个不比另一个多 Unicode。
不要让来自 Microsoft 的不幸历史文物让您感到困惑。
Unicode 的开发旨在创建一个新标准,用于映射当今使用的绝大多数语言中的字符,以及其他不是那么重要但可能是创建文本所必需的字符。 UTF-8 只是您可以对文件进行编码的众多方式之一,因为您可以通过多种方式将文件中的字符编码为 Unicode。
资源:
http://www.differencebetween.net/technology/difference-between-unicode-and-utf-8/
除了 Trufa 的评论,Unicode 明确不是 UTF-16。当他们第一次研究 Unicode 时,推测 16 位整数可能足以存储任何代码,但实际上事实并非如此。但是,UTF-16 是 Unicode 的另一种有效编码——除了 8 位和 32 位变体之外——我相信这是微软在运行时在 NT 派生操作系统上在内存中使用的编码。
Unicode=UTF16
成立,对吗?
让我们从记住数据存储为字节开始; Unicode 是一个字符集,其中字符映射到代码点(唯一整数),我们需要一些东西来将这些代码点数据转换为字节。这就是 UTF-8 出现所谓编码的地方——简单!
有点奇怪。 Unicode 是一种标准,而不是一种编码。由于可以指定字节顺序,我猜它实际上是 UTF-16 或 32。
这个菜单是从哪里提供的?
Unicode
来指代UTF-16
的错误陈述。