星期三, 十二月 03, 2003

中文编码转换

最近编程时需要用到将中文字符串在GB2312和UTF-8之间转换,UTF-8是Unicode的一种常见编码方式(便于和老的只处理ASCII 的系统兼容),GB2312则是中国国家汉字编码标准(与GBK兼容),UTF-8与GB2312在汉字编码上是完全不同的,在网上找这方面的中文资料很困难,最后是在一些片断代码中找到转换方法:

char strU [100]; //UTF-8编码

WCHAR* strW; //Unicode编码

int c = MultiByteToWideChar (CP_UTF8, 0, strU, -1 ,NULL,0);

strW = new WCHAR[i];

MultiByteToWideChar (CP_UTF8, 0, strU, -1, strW, c);

c = WideCharToMultiByte(CP_ACP, 0, strW,-1, NULL, 0, NULL, NULL);

char *strG = new char[c]; //GB2312编码

WideCharToMultiByte (CP_ACP, 0, strW, -1, strG, i, NULL, NULL);


上面的代码可以将strU(UTF-8字符串)转换到strG(GB2312),过程是先将strU转到Unicode(WCHAR)的strW,再从 Unicode转换到GB2312的strG,反之从GB2312转到UTF-8也是一样,需要用Unicode中转一下。
虽然我已经测试这段代码工作正常,可我不太明白的是后一步的转换使用的是CP_ACP代码页(ANSI代码页),为什么不用936代码页(GBK)呢? 可能是因为我的中文win2000缺省ANSI代码页是936。

0 Comments:

发表评论

<< Home