unicode、utf8、字符串字面值

发现好多新人都不明白,或者说没有直观的感受,其实很简单。

简单的说,unicode是一种将全球文字都涵盖的字典 - 可以认为每个字符都有一个数字索引。

比如可以这样(假设):'a' 的索引是13,'我' 的索引是11245,'の' 的索引是 50789等等。

这样,任何人只要拿着数字就可以找到对应的字符。

那么,UTF8又是怎么回事?

还是要从unicode说起,我们可以认为unicode只是字符与数字的对应关系,至于怎么保存这个数字(保存了数字,也就等于保存了字符),那就是unicode用户的事了。

(多说一句,这里的unicode用户不是你我他这种,而是程序)

各路大神纷纷实现了自己的存储方式,或者考虑编解码效率,或者考虑存储效率。

但各自为战总是不方便沟通交流,于是某个组织推出了一种编码UTF,号召大家都用这个。

只不过这个编码工作显然也需要一代一代的迭代进化,所以有了今天的UTF8编码。兼顾存储效率和读写效率。

字符串字面值,说白了就是一串unicode序列。

如果你搞Java,那在java.lang.String里有code point的概念,这个code point应该指的就是unicode - 明天确认一下。

如果你搞golang,应该知道golang中所有字符串都是UTF8编码,还有一个rune类型,不妨想想是怎么回事。

ps:

  至于为什么出现unicode,这就跟春秋战国时期各个国家都有自己的文字一样,沟通很不方便,而且可能一样的字形截然不同的含义。

  于是有了unicode,保证了大家书同文车同轨,剩下的爱怎么使用这种文字都是你的事了。

原文地址:https://www.cnblogs.com/larryzeal/p/9411005.html