为了账号安全,请及时绑定邮箱和手机立即绑定

Unicode和UTF-8有什么区别?

Unicode和UTF-8有什么区别?

一只甜甜圈 2019-12-07 15:04:58
考虑:是真的unicode=utf16吗?许多人说Unicode是一种标准,而不是一种编码,但是大多数编辑器实际上都支持另存为Unicode 编码。
查看完整描述

3 回答

?
潇潇雨雨

TA贡献1833条经验 获得超4个赞

大多数编辑器实际上都支持另存为“ Unicode”编码。

这是Windows不幸的错误命名。

因为Windows内部使用UTF-16LE编码作为Unicode字符串的内存存储格式,所以Windows认为这是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标准。


查看完整回答
反对 回复 2019-12-07
?
呼唤远方

TA贡献1856条经验 获得超11个赞

正如拉斯穆斯(Rasmus)在他的文章“ UTF-8和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字符集将每个数字转换为相应的字符。结果字符串为“ hello”。

结论

因此,当有人问您“ UTF-8和Unicode有什么区别?”时,您现在可以放心地回答简短而精确的问题:

无法比较UTF-8(Unicode转换格式)和Unicode。UTF-8是一种用于将数字转换为二进制数据的编码。Unicode是用于将字符转换为数字的字符集。


查看完整回答
反对 回复 2019-12-07
  • 3 回答
  • 0 关注
  • 835 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信