Windows编码 utf8 ,unicode,gbk2312 , MultiByteToWideChar ,WideCharToMultiByte各种关系和用法

*##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是三字节存储汉字
他们都是变长编码(变化的变)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值