因为utf8编码的字符串长度和字符个数没有固定换算关系,导致排版,排序之类的复杂度上升。
Go语言就是内部用utf8存储,但它也提供rune类型来处理字符问题。
看错题目了,重新补充在前面。
为什么要用Unicode储存,因为UTF-8是一种专门设计用来传输的编码格式,是将Unicode字符串编码成字节的一种方式。
专门设计用来传输的编码显然不适合直接拿来表达字符串,一是字符串的长度无法预计,二是很难从中截断或者截取字符。
但实际上Windows内部字符串并非真正是Unicode位码储存的,而是以UTF-16编码格式储存的。
这是因为以前以为16位足够了,所以以前就是直接存的Unicode位码,直到现在很多地方还是叫Unicode而不是UTF-16。
谁知道后来Unicode升位了,为了兼容,不能又把所有的字符用32位去存,就只好用UTF-16编码代替,反正对于之前用到的那些字符,用UTF-16编码存都是一样的(低位Unicode字符的Unicode位码和UTF-16是一样的)。