如果涉及到字符编码的转换,则需要弄清楚两件事情,一:自己的编码格式,二:目标编码格式。
很炒蛋的事是由于编码格式的分类 标准 和 角度 不同,很容易把人弄晕,既搞不清自己的编码格式,也搞不清别人的编码格式。 大部分文章是针对一点进行解释,管中窥豹。
如果你看了各个字符集的介绍还是不知道怎么转换。还得搞清楚字符集的发展过程、分类方式。
字符集与字符编码
这部分几乎是混在一块。
字符集:规定了具体的字符的二进制格式,对应的概念是单个字符概念。
字符编码格式:用字符集构建字符串的时候使用的策略。对应的概念是整个串怎么组织。
如unicode是字符集,UTF-8是编码格式。
按字节数分类:
单字节,多字节,unicode(固定两字节,也叫宽字节)
这个地方就有问题了,unicode是具体的字符集, 多字节字符集 是 字符集的集合。 不是一个层次的概念。
按具体字符集分类:
ascII ,gbk ,unicode,
各个字符集介绍:https://blog.csdn.net/ancky/article/details/2034809
按发展历程分:
1、ASCII
2、本地化ANSI ( GB2132, BIG5 ,JIS ) 。ASCII不够用了,各个国家扩充一下。 ANSI是个标准,不是具体字符集。
3、国际化unicode 。 本地化太琐碎,统一一下。
在这个发展历程之外,如GB2132不够用了又扩充为GBK。 unicode太浪费空间,UTF进行编码时转换了一下,节省了部分空间。
发展历程介绍:https://blog.csdn.net/youxishaonian/article/details/70312438
举个例子:
如果在VS中编写接口,提供json数据给前端显示。有如下情况:
前端:一般统一为UTF-8。
json: 标准里也要求为UTF-8。
VS: 项目设置中有unicode和多字节字符集两个选项。
如果你是多字节,你还是不知道自己的字符集。
需要在命令行输入:chcp,得到活动代码页(就是字符集)。 如936代表GB2312。
活动代码页简介:https://blog.csdn.net/yelbosh/article/details/7518484
根据自己的字符集GB2312,转化为 UTF-8的 编码格式, 这已经不是一个层面的概念在转换了。
所以可以理解为 :
多字节--->宽字节
GB2312--->UNICODE
char---->wchar
ANIS ---->unicode
另:我猜测VS把unicode和多字节放一个层次进行选择,估计unicode既是一个标准,又包含了具体的实现。