跨平台c++中处理UTF字符串

  • 基本概念
  1. 跨平常用的字符集:utf-8 utf-16 utf-32
  2. 大端、小端:这时编码顺序的问题,是字节顺序,以字节为单位,正反存储。就像说话正着说、倒着说一样,0x1234,在存储时可以存为0x1234或者0x3412,如果实际存储顺序和我们正常阅读的顺序一致,那就是大端存储,否则就是小端。只有utf8不存在大小端问题。utf16 utf32都有大小端问题,两个系统采用相同的编码,但是大小端可能不一样,那编码就不能直接通用。其实计算机中的整数、浮点数,也一样,也可以正着存、反着存,所以不同计算机、不同系统、不同语言交互时才会需要统一序列化格式。
  3. 字符集选择:如果用与存储、传输,utf8是首选,因为体积小。如果是字符串处理,首选utf-16(它的常用字符集6万多,是固定的),utf-32,固定宽度,算法简单。如果只选一个,选utf-16把,常用字符集6万,操作也方便。网页里一般都是utf8,这样网页的体积小,因为utf8里英文字符都是单字节,光这一项,体积就小很多。
  4. locale:时区,把字符串输出到控制台时,很有可能要用到这东西了,这东西需要的是什么编码,就要把自己的字符串转成什么编码输出。
  5. unicode和utf:unicode是一个不断演进的编码体系,具体到编程上,unicode编码是16位固定编码,比较老的了,现在一般不用,麻烦,搞不懂。utf(8,16,32)编码都是相对比较新、设计考量比较全面。新的开发语言、新的操作系统,现代的应用开发,一般都会采用utf编码,我们跟随潮流走,就行了。
继续阅读跨平台c++中处理UTF字符串