MultiByteToWideChar
前些日子了解了一下UTF-8怎么变UNICODE,之后又想到怎么把GB2312变成UNICODE,发现WINAPI函数可以帮我们做这个动作,根本没必要知道GB2312编码表啊,直接就可以转,估计是WINDODS的API函数把他封装起来了。
由于这个在BXC有人写过这样的TOOL,所以没有必要写了,只要知道他是怎么实现的就行了,看了下面的CODE你就知道,怎么实现GB2312变成 UNICODE,值得一提的时候,在转换的时候,必要要先用这个函数得到这个ANSI(GB2312)实际上有多少个UNICODE字符,之后再申请这多个空间。
/
#include "stdafx.h"
#include
#include
#include
#include
#include
int main(void)
{
char cword[20] = {"中华人民共和国"}; //定义一个GB2312的字串
DWORD num= MultiByteToWideChar(CP_ACP,0,cword,-1,NULL,0);
//计算这个GB2312实际有几个字组成
WCHAR *wword; //定义一个UNICODE的指针
wword= (WCHAR*)calloc(num,sizeof(WCHAR));//动态的申请空间存字
if(wword == NULL) //判断申请到空间没有
{
free(wword);
}
memset(wword, 0, num*sizeof(WCHAR)); //初始化动作
MultiByteToWideChar(CP_ACP,0, cword, -1, wword, num);
//把GB2312变成UNICODE
free(wword);
return 0;
}
API 函数 MultiByteToWideChar
第一个参数为代码页, 用 GetLocaleInfo 函数获取当前系统的代码页,936: 简体中文, 950: 繁体中文
第二个参数为选项,一般用 0 就可以了
第三个参数为 ANSI 字符串的地址, 这个字符串是第一个参数指定的语言的 ANSI 字符串 (AnsiString)
第四个参数为 ANSI 字符串的长度,如果用 -1, 就表示是用 0 作为结束符的字符串
第五个参数为转化生成的 unicode 字符串 (WideString) 的地址, 如果为 NULL, 就是代表计算生成的字符串的长度
第六个参数为转化生成的 unicode 字符串缓存的容量,也就是有多少个UNICODE字符。
参考资料:
http://blog.sina.com.cn/s/blog_4d25c9870100cnqo.html