根据维基百科UTF-8页面,我从人们那里听到了相互矛盾的观点。
它们是一样的,不是吗?有人能澄清一下吗?
根据维基百科UTF-8页面,我从人们那里听到了相互矛盾的观点。
它们是一样的,不是吗?有人能澄清一下吗?
当前回答
如果我可以总结一下我从这篇文章中收集到的信息:
Unicode将字符分配给序数(十进制形式)。(这些数字被称为码位。)
à -> 224
UTF-8是一种将这些序数(十进制形式)“转换”为二进制表示的编码。
224 -> 11000011 10100000
注意,我们讨论的是224的二进制表示,而不是它的二进制形式,即0b11100000。
其他回答
现有的答案已经解释了很多细节,但这里有一个非常简短的答案,有最直接的解释和例子。
Unicode是将字符映射到码点的标准。 每个字符都有一个唯一的编码点(识别号),它是一个像9731这样的数字。
UTF-8是码点的编码。 为了将所有字符存储在磁盘上(在文件中),UTF-8将字符分成最多4个八位字节(8位序列)-字节。 UTF-8是几种编码(表示数据的方法)之一。例如,在Unicode中,(十进制)码位9731表示一个雪人(☃),它在UTF-8中由3个字节组成:E2 98 83
这是一个排序的列表,其中有一些随机的例子。
1. Unicode
有很多世界各地的字符,如“$,& h,, t, ?,张,1 = +……”。
然后出现了一个致力于这些角色的组织,
他们制定了统一码标准。
标准如下:
创建一个表单,其中每个位置都称为“代码点”或“代码位置”。 整个位置从U+0000到U+10FFFF; 到目前为止,有些位置被字符填充,有些位置被保存或为空。 例如,位置“U+0024”被字符“$”填充。
PS:当然,还有另一个叫做ISO的组织维护着另一个标准——“iso10646”,几乎是一样的。
2. utf - 8
如上所述,U+0024只是一个位置,所以我们不能将“U+0024”在电脑中保存为字符“$”。
必须有一种编码方法。
然后是编码方法,如UTF-8,UTF-16,UTF-32,UCS-2....
在UTF-8下,代码点“U+0024”被编码为00100100。
00100100是我们在计算机中为“$”保存的值。
它们是一样的,不是吗?
不,他们不是。
我认为你引用的维基百科页面的第一句话给出了一个很好的,简短的总结:
UTF-8是一种可变宽度字符编码,能够使用一到四个8位字节编码Unicode中的所有1,112,064个有效代码点。
阐述:
Unicode is a standard, which defines a map from characters to numbers, the so-called code points, (like in the example below). For the full mapping, you can have a look here. ! -> U+0021 (21), " -> U+0022 (22), \# -> U+0023 (23) UTF-8 is one of the ways to encode these code points in a form a computer can understand, aka bits. In other words, it's a way/algorithm to convert each of those code points to a sequence of bits or convert a sequence of bits to the equivalent code points. Note that there are a lot of alternative encodings for Unicode.
乔尔给出了一个非常好的解释,并概述了这里的历史。
作为一个直截了当的简单回答:
Unicode是一种表示多种人类语言字符的标准。 UTF-8是一种编码Unicode字符的方法。
是的:我故意忽略了UTF-8的内部工作原理。
不幸的是,“Unicode”根据上下文以各种不同的方式使用。它最正确的用法(IMO)是作为编码字符集——即一组字符以及字符与表示它们的整数码位之间的映射。
UTF-8是一种字符编码——一种将字节序列转换为字符序列的方法,反之亦然。它涵盖了整个Unicode字符集。ASCII编码为每个字符一个字节,其他字符根据其确切的码位占用更多字节(当前定义的所有码位最多4个字节,即最多U-0010FFFF,实际上4个字节可以处理最多U-001FFFFF)。
当“Unicode”被用作字符编码的名称时(例如,作为. net编码。Unicode属性)通常表示UTF-16,它将大多数常见字符编码为两个字节。一些平台(特别是。net和Java)使用UTF-16作为它们的“原生”字符编码。如果您需要担心不能在单个UTF-16值中编码的字符(它们被编码为“代理对”),这将导致一些棘手的问题——但大多数开发人员从不担心这一点,IME。
关于Unicode的一些参考:
Unicode联盟网站,特别是教程部分 乔尔的文章 我自己的文章(面向. net)