读书人

怎么c语言实现utf8与gbk得互转得代码

发布时间: 2012-03-12 12:45:33 作者: rapoo

如何c语言实现utf8与gbk得互转得代码
如题, 是否需要自己查表.有没有规则.谢谢各位.

[解决办法]
用 unicode编码 进行中转
[解决办法]
VC中GBK与UTF8字符串的转换

1. void ConvertGBKToUtf8(CString& strGBK) {
2. int len=MultiByteToWideChar(CP_ACP, 0, (LPCTSTR)strGBK, -1, NULL,0);
3. unsigned short * wszUtf8 = new unsigned short[len+1];
4. memset(wszUtf8, 0, len * 2 + 2);
5. MultiByteToWideChar(CP_ACP, 0, (LPCTSTR)strGBK, -1, wszUtf8, len);
6. len = WideCharToMultiByte(CP_UTF8, 0, wszUtf8, -1, NULL, 0, NULL, NULL);
7. char *szUtf8=new char[len + 1];
8. memset(szUtf8, 0, len + 1);
9. WideCharToMultiByte (CP_UTF8, 0, wszUtf8, -1, szUtf8, len, NULL,NULL);
10. strGBK = szUtf8;
11. delete[] szUtf8;
12. delete[] wszUtf8;
13. }

1. void ConvertUtf8ToGBK(CString& strUtf8) {
2. int len=MultiByteToWideChar(CP_UTF8, 0, (LPCTSTR)strUtf8, -1, NULL,0);
3. unsigned short * wszGBK = new unsigned short[len+1];
4. memset(wszGBK, 0, len * 2 + 2);
5. MultiByteToWideChar(CP_UTF8, 0, (LPCTSTR)strUtf8, -1, wszGBK, len);
6. len = WideCharToMultiByte(CP_ACP, 0, wszGBK, -1, NULL, 0, NULL, NULL);
7. char *szGBK=new char[len + 1];
8. memset(szGBK, 0, len + 1);
9. WideCharToMultiByte (CP_ACP, 0, wszGBK, -1, szGBK, len, NULL,NULL);
10. strUtf8 = szGBK;
11. delete[] szGBK;
12. delete[] wszGBK;
13. }
[解决办法]
另外,推荐参看:
http://www.vckbase.com/document/viewdoc/?id=1397
[解决办法]
ls的方法,
严格说不是什么Vc中的转换过程
只不过是windows操作系统的转换过程罢了


[解决办法]
有规则,也有个不小的表要查...
[解决办法]
请参阅iconv库(开源)
[解决办法]
可以这么理解,UTF8是UNICODE的变种,UTF8是从UNICODE编码计算出来,不需要查表。

而UNICODE和GBK是不同的字符集,也就是同样的字由不同的数字表示,是事先规定好的,他们之间有一一对应的关系,所以这种情况的转换是直接查表

一般做法是UTF8--计算--> UNICODE--查表--> GBK
[解决办法]
iconvlib 也可以,好用

读书人网 >C++

热点推荐