*##Windows编码 utf8 ,unicode,gbk2312 , MultiByteToWideChar ,WideCharToMultiByte各种关系和用法
基础不行,一直以来都不知道这些东西到底是什么东西,网上对于这两个函数的介绍大多都是介绍概念,忽略了像我这种啥都不懂的小白完全不会应用的情况。
小白视角,欢迎指正
开门见山
MultiByteToWideChar
WideCharToMultiByte
到底怎么用
参数就不一一介绍了,获取长度大家也会,这些东西网上很多,我只讲第一个参数
int utfLen = MultiByteToWideChar(CP_UTF8, 0, Outdata, -1, NULL, 0);
wchar_t* utfStr = new wchar_t[utfLen + 1];
memset(utfStr, 0, utfLen + 1);
MultiByteToWideChar(CP_UTF8, 0, Outdata, -1, utfStr, utfLen);
int asciLen = WideCharToMultiByte(CP_ACP, 0, utfStr, -1, NULL, 0, NULL, NULL);
char* str = new char[asciLen + 1];
memset(str, 0, asciLen + 1);
WideCharToMultiByte(CP_ACP, 0, utfStr, -1, str, asciLen, NULL, NULL);
MultiByteToWideChar(CP_UTF8
它的意思是:我是utf8,我要转化成unicode(因为windows整个就是unicode-16)
WideCharToMultiByte(CP_ACP
它的意思是:我已经是unicode-16了,我要转化成cp_ acp(asci)
所以不用纠结什么多字节宽字符之类的名词了
转化方式就很清楚了
1.确定现在自己手里面是什么编码格式
调用MultiByteToWideChar(你的编码,…-1…)获取转化后的长度,这样可以确定要用多大的数组收它
之后调用MultiByteToWideChar(你的编码,…)
这样就把你的数据转化为unicode-16的编码格式了
2.用上面拿到的unicode-16格式的字符串(wchar_t格式)
调用WideCharToMultiByte(希望的编码, …-1)获取长度
然后WideCharToMultiByte(希望的编码, 0…)
这样就转化成功了
3.编码的入参名可以百度查询,如果你只是要unicode-16,就只做第一步就可以了,如果手里已经是unicode16的格式了,直接进行第二步即可
4.不要妄想直接转化!!
额外一些知识
1.asci是什么?
如果英文那就是ascii’
如果是中文那就是gbk2312
2.utf8 unicode unicode16是什么?
unicode不是编码格式
unicode是一个规则,utf8或者unicode16是对unicdoe规则的部分实现
unicode16和gbk2312是双字节存储存储汉字
utf8是三字节存储汉字
他们都是变长编码(变化的变)