简介
这几天一直在研究中文的简体和繁体之间的转换问题,网上查了一下资料,在此进行整理和备份。
繁体中文有GBK码和BIG5码两种编码,简体中文一般使用的是GB2312编码。
这些编码之间的转换基本都是使用下列3个函数:LCMapString、WideCharToMultiByte和MultiByteToWideChar,其中还会牵涉到UNICODE码和UTF-8码这两种编码。
GB2312编码与GBK编码可以直接使用LCMapString转换,GB2312编码/GBK编码与BIG5编码则无法直接转换,必须使用UNICODE作为中间编码进行中转。
另外UTF-8编码是网络常用编码,如XML文件和网页基本都是使用这种编码,所以在此也一并研究了一下。
下面是我将GB2312/GBK/BIG5/UNICODE/UTF-8这5种编码之间的转换编写到一个函数的代码。
代码
1 int Convert(void *sstr, int scp, void **dstr, int dcp) 2 { 3 #define CP_GBK 936 4 #define CP_BIG5 950 5 #define CP_UTF8 65001 6 7 enum { _unicode, _utf8, _gb2312, _gbk, _big5 }; 8 enum { _wc2mb, _mb2wc, _sc2tc, _tc2sc }; 9 10 LCID lcid; 11 void *src; 12 void *dest; 13 int cch; 14 int scp0; 15 int act; 16 UINT cp; 17 18 if (((scp < _