字符集编码间转换
在编程中涉及到“中文字符”时,经常需要进行字符集编码间转换。比如代码中以“GBK”字符集编码来处理,而程序中读取文件内容却是“UNICODE”字符集编码(即文件的前两个字节为0XFFFE),此时就涉及到字符集编码间转换,以免出现乱码。
LINUX:
#include <iconv.h> { iconv_t cd = iconv_open(char* tocode, char* fromcode) if (cd != (iconv_t)(-1)) { printf("iconv_open successfully!\n"); } char* pinbuf, char* poutbuf; int inlen, outlen; int ret = iconv(cd, &pinbuf, (size_t *)&inlen, &poutbuf, (size_t *)&outlen) if (ret != -1) { printf("iconv successfully!"); } iconv_close(cd) }
字符集编码转换依赖于本地系统,命令:iconv --list显示所有可以相互间转换的值。
Windows:
完成UTF-16(宽字符)转换成其他新字符集编码(__in UINT CodePage).http://msdn.microsoft.com/en-us/library/dd374130(v=vs.85).aspx
int WideCharToMultiByte( __in UINT CodePage, __in DWORD dwFlags, __in LPCWSTR lpWideCharStr, __in int cchWideChar, __out LPSTR lpMultiByteStr, __in int cbMultiByte, __in LPCSTR lpDefaultChar, __out LPBOOL lpUsedDefaultChar );
完成其他字符集编码(__in UINT CodePage)转换成UTF-16(宽字符).http://msdn.microsoft.com/en-us/library/dd319072(v=vs.85).aspx
int MultiByteToWideChar( __in UINT CodePage, __in DWORD dwFlags, __in LPCSTR lpMultiByteStr, __in int cbMultiByte, __out LPWSTR lpWideCharStr, __in int cchWideChar );