请考虑以下内容:
“unicode=utf16
”这种说法是否正确?
很多人认为Unicode是一个标准,而不是一种编码,但是大多数编辑器实际上支持以Unicode编码的方式保存。
请考虑以下内容:
“unicode=utf16
”这种说法是否正确?
很多人认为Unicode是一个标准,而不是一种编码,但是大多数编辑器实际上支持以Unicode编码的方式保存。
在他的文章"UTF-8和Unicode之间的区别?"中,Rasmus指出:
如果有人问你:“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字符集将每个数字转换为相应的字符。最终得到的字符串是“hello”。
因此,当有人问你“UTF-8和Unicode之间有什么区别?”时,你现在可以自信地给出简短而精确的答案:
UTF-8(Unicode转换格式)和Unicode不能进行比较。 UTF-8是一种用于将数字转换为二进制数据的编码。 Unicode是一种用于将字符转换为数字的字符集。
这并不是那么简单。
UTF-16是一种16位变长编码。仅仅称呼某个东西为"Unicode"是含糊不清的,因为"Unicode"指的是一整套用于字符编码的标准。Unicode 不是 一种编码方式!
http://en.wikipedia.org/wiki/Unicode#Unicode_Transformation_Format_and_Universal_Character_Set
当然,还有强制性的Joel On Software - 每个软件开发者绝对必须知道的有关Unicode和字符集的绝对最低限度(没有任何借口)链接。
这里存在很多误解。Unicode不是一种编码,而Unicode标准主要是用于编码。
ISO 10646是你(可能)关心的国际字符集。它定义了一种命名字符集(例如,“Latin Capital Letter A”或“Greek small letter alpha”)和一组代码点之间的映射(为每个分配的数字 - 例如61十六进制和3B1十六进制分别对应;对于Unicode代码点,标准表示法将是U+0061和U+03B1)。
曾经,Unicode定义了自己的字符集,更像是ISO 10646的竞争者。它是一个16位字符集,但不是UTF-16;它被称为UCS-2。它采用了一种相当有争议的技术,试图将必需字符的数量最小化(汉字统一 - 基本上将相似的中文、日文和韩文字符视为相同字符)。
此后,Unicode联盟默认承认这种方法行不通,并主要集中于编码ISO 10646字符集的方式。主要方法是UTF-8、UTF-16和UCS-4(也称为UTF-32)。这些方法(除了UTF-8)还有LE(小端序)和BE(大端序)变体。
单独使用“Unicode”,几乎可以指任何上述方式(尽管我们可能可以排除它明确显示的其他方式,例如UTF-8)。在Windows上最常出现不加限定的“Unicode”,几乎肯定是指UTF-16。早期版本的Windows NT在UCS-2流行时采用了Unicode。在UCS-2被宣布过时后(大约在Win2k左右),它们切换到UTF-16,这是与UCS-2最相似的(事实上,在“基本多语言平面”中的字符包括大多数西欧语言的所有字符,两者完全相同)。
UTF-16和UTF-8都是Unicode的编码方式。它们都是Unicode,其中一个不会比另一个更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
是正确的,对吗? - ollydbg让我们始终记住数据以字节为单位存储;Unicode是一个字符集,其中字符被映射到代码点(唯一的整数),我们需要某种方式将这些代码点数据转换为字节。这就是所谓的编码UTF-8派上用场的地方 - 简单易懂!
这很奇怪。Unicode是一个标准,而不是一种编码方式。由于可以指定字节序,我猜它实际上是UTF-16或者UTF-32。
这个菜单是从哪里提供的?