考虑:
unicode=utf16
是否属实?
许多人都说Unicode是标准,而不是编码,但大多数编辑支持实际保存为Unicode 编码。
答案 0 :(得分:525)
正如拉斯穆斯在他的文章"The difference between UTF-8 and Unicode?"中所述(已修订链接):
如果问到这个问题,“UTF-8和。之间有什么区别? Unicode?“,你会自信地回复一个短而精确的 回答?在国际化的这些日子里,所有的开发者都应该 能够做到这一点。我怀疑我们很多人都不理解这些概念 我们也应该这样做。如果你觉得自己属于这个群体,你应该这样做 阅读这篇关于字符集和编码的简短介绍。
实际上,比较UTF-8和Unicode就像比较苹果和 桔子:
UTF-8是一种编码 - Unicode是一个字符 设置强>
字符集是具有唯一编号的字符列表(这些 数字有时被称为“代码点”)。例如,在 Unicode字符集, A 的编号为41。
另一方面,编码是一种翻译a的算法 二进制数字列表,以便存储在磁盘上。例如 UTF-8会像这样翻译数字序列1,2,3,4:
00000001 00000010 00000011 00000100
我们的数据现已翻译成二进制文件,现在可以保存到 磁盘。
现在一起
假设某个应用程序从磁盘中读取以下内容:
1101000 1100101 1101100 1101100 1101111
应用程序知道此数据代表用其编码的Unicode字符串 UTF-8并且必须将其显示为用户的文本。第一步,是 将二进制数据转换为数字。该应用程序使用UTF-8算法 解码数据。在这种情况下,解码器返回:
104 101 108 108 111
由于应用程序知道这是一个Unicode字符串,因此可以假定每个字符串 数字代表一个角色。我们使用Unicode字符集 将每个数字转换为相应的字符。所结果的 string是“你好”。
结论
所以当有人问你“UTF-8和UTF-8之间有什么区别? Unicode?“,您现在可以自信地回答短而精确的问题:
UTF-8(Unicode转换格式)和Unicode无法进行比较。 UTF-8是一种编码 用于将数字转换为二进制数据。 Unicode是一个字符集 用于将字符翻译成数字。
答案 1 :(得分:156)
大多数编辑器支持实际保存为“Unicode”编码。
这是Windows不幸发生的错误行为。
由于Windows在内部使用UTF-16LE编码作为Unicode字符串的内存存储格式,因此它认为这是Unicode文本的自然编码。在Windows世界中,有ANSI字符串(当前机器上的系统代码页,完全不可移植),并且有Unicode字符串(内部存储为UTF-16LE)。
在我们意识到UCS-2还不够之前以及UTF-8发明之前,这一切都是在Unicode早期设计的。这就是为什么Windows对UTF-8的支持是全面的。
这种误导的命名方案成为用户界面的一部分。使用Windows编码支持提供一系列编码的文本编辑器将自动且不恰当地将UTF-16LE描述为“Unicode”,并将UTF-16BE(如果提供)描述为“Unicode big-endian”。
(编写自己的其他编辑器,如Notepad ++,没有这个问题。)
如果它让你感觉更好,'ANSI'字符串也不是基于任何ANSI标准。
答案 2 :(得分:28)
这不是那么简单。
UTF-16是一种16位可变宽度编码。简单地称“Unicode”是不明确的,因为“Unicode”指的是用于字符编码的整套标准。 Unicode 不是一种编码!
http://en.wikipedia.org/wiki/Unicode#Unicode_Transformation_Format_and_Universal_Character_Set
答案 3 :(得分:15)
这里显示了很多误解。 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)。无限制地使用“Unicode”可能最常发生在Windows上,几乎可以肯定地引用UTF-16。当UCS-2是最新的时,早期版本的Windows NT采用Unicode。在宣布UCS-2过时后(在Win2k附近,如果内存服务),他们切换到UTF-16,这与UCS-2最相似(事实上,它对于“基本多语言平面”中的字符是相同的,其涵盖很多,包括大多数西欧语言的所有角色。)
答案 4 :(得分:7)
UTF-16和UTF-8都是Unicode的编码。它们都是 Unicode;一个不是更多 Unicode而不是另一个。
不要让微软的一件不幸的历史文物让你感到困惑。
答案 5 :(得分:4)
目标是开发Unicode 为映射创建新标准 绝大多数的人物 今天使用的语言, 以及其他角色 不是那么重要但可能是 创建文本所必需的。 UTF-8 只是你的众多方式之一 可以编码文件,因为有 你可以编码的很多方法 文件中的字符转换为Unicode。
来源:
http://www.differencebetween.net/technology/difference-between-unicode-and-utf-8/
答案 6 :(得分:3)
除了Trufa的评论,Unicode明确不是UTF-16。当他们第一次看到Unicode时,推测16位整数可能足以存储任何代码,但实际上并非如此。但是,UTF-16是另一种有效的Unicode编码 - 与8位和32位变体一样 - 我相信是微软在NT衍生操作系统上运行时在内存中使用的编码。
答案 7 :(得分:2)
让我们从记住数据存储为字节开始; Unicode是一个字符集,其中字符映射到代码点(唯一整数),我们需要一些东西将这些代码点数据转换为字节。这就是UTF-8所谓的编码 - 简单!
答案 8 :(得分:1)
这很奇怪。 Unicode是标准,而不是编码。由于可以指定字节序,我猜它实际上是UTF-16或32。
此菜单从哪里提供?