MultiByteToWideChar
前些日子了解了一下UTF-8怎么变UNICODE,之后又想到怎么把GB2312变成UNICODE,发现WINAPI函数可以帮我们做这个动作,根本没必要知道GB2312编码表啊,直接就可以转,估计是WINDODS的API函数把他封装起来了。
由于这个在BXC有人写过这样的TOOL,所以没有必要写了,只要知道他是怎么实现的就行了,看了下面的CODE你就知道,怎么实现GB2312变成UNICODE,值得一提的时候,在转换的时候,必要要先用这个函数得到这个ANSI(GB2312)实际上有多少个UNICODE字符,之后再申请这多个空间。
/////////////////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include <string.h>
#include <Windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <iostream.h>
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字符。
Nigel Yan 于西安2009-04-07
加载中,请稍候......