根据维基百科UTF-8页面,我从人们那里听到了相互矛盾的观点。
它们是一样的,不是吗?有人能澄清一下吗?
根据维基百科UTF-8页面,我从人们那里听到了相互矛盾的观点。
它们是一样的,不是吗?有人能澄清一下吗?
当前回答
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是编码Unicode的一种特殊方式。
根据您的应用程序和您打算使用的数据,有许多不同的编码可供选择。据我所知,最常见的是UTF-8、UTF-16和UTF-32。
不幸的是,“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)
UTF-8是一种使用8位序列编码Unicode字符的方法。
Unicode是一种用于表示来自多种语言的各种字符的标准。
UTF-8是Unicode文本的一种可能的编码方案。
Unicode是一个范围广泛的标准,它定义了超过140,000个字符,并为每个字符分配一个数字代码(一个码位)。它还定义了如何对文本进行排序、规范化、更改大小写等规则。Unicode中的字符由一个从0到0x10FFFF(包括0x10FFFF)的码位表示,但有些码位是保留的,不能用于字符。
将一串Unicode码位编码成二进制流的方法不止一种。这些被称为“编码”。最直接的编码是UTF-32,它将每个代码点存储为32位整数,每个整数宽为4字节。因为代码点最多只能到0x10FFFF(需要21位),所以这种编码有点浪费。
UTF-8是另一种编码,由于与UTF-32和其他编码相比有许多优点,它正在成为事实上的标准。UTF-8将每个码位编码为1、2、3或4个字节值的序列。ASCII范围内的码位被编码为一个单字节值,以便与ASCII兼容。超出这个范围的代码点分别使用2、3或4个字节,这取决于它们所在的范围。
UTF-8在设计时考虑了这些属性:
ASCII characters are encoded exactly as they are in ASCII, such that an ASCII string is also a valid UTF-8 string representing the same characters. More efficient: Text strings in UTF-8 almost always occupy less space than the same strings in either UTF-32 or UTF-16, with just a few exceptions. Binary sorting: Sorting UTF-8 strings using a binary sort will still result in all code points being sorted in numerical order. When a code point uses multiple bytes, none of those bytes contain values in the ASCII range, ensuring that no part of them could be mistaken for an ASCII character. This is also a security feature. UTF-8 can be easily validated, and distinguished from other character encodings by a validator. Text in other 8-bit or multi-byte encodings will very rarely also validate as UTF-8 due to the very specific structure of UTF-8. Random access: At any point in a UTF-8 string it is possible to tell if the byte at that position is the first byte of a character or not, and to find the start of the next or current character, without needing to scan forwards or backwards more than 3 bytes or to know how far into the string we started reading from.
作为一个直截了当的简单回答:
Unicode是一种表示多种人类语言字符的标准。 UTF-8是一种编码Unicode字符的方法。
是的:我故意忽略了UTF-8的内部工作原理。