CString类型转char类型出现中文乱码问题
一般来说CString类型的变量具有很强的操作性,但有时为了使用某些c函数,必须将CString类型的变量转换为char数组类型。关于CString转char的方法,网上查了查,发现大都没介绍清楚,这里写出来做个小结,加深下印象。
为完成他们之间的转换,首先得说明一下他们所占的内存大小。CString属于所谓的宽字符集,占一个字符占两个字节; char类型属于窄字符集,一个char字符占一个字节。故他们之间的转换涉及到字节大小的转换。另一方面MFC中Ctring,默认采用unicode编码,而char采用ansi编码,两种编码中单个字符占的存储大小也是不同的。
将CString转char,会用到一个函数 WideCharToMultiByte, 其实unicode与utf-8的互转,unicode与ansi的互转,均可以利用此函数完成,该函数的原型为
int WideCharToMultiByte(UINT CodePage, DWORD dwFlags, LPCWSTR lpWideCharStr, int cchWideChar, LPSTR lpMultiByteStr,int cchMultiByte, LPCSTR lpDefaultStr, LPBOOL lpUsedDefaultChar);
该函数的参数介绍就不说了,多看几次就记住了。CString变量中有中文等多字节字符,就要注意CodePage的类型,如果要写出到文件,还要注意转换的编码和文件的编码一致,不然打开仍然乱码。下面贴出简短代码
View Code
1 CString tmp(_T("程序猿")); // 待转换CString变量 2 wchar_t *ptr; 3 char buf[16]; // 目标存储空间 4 5 ptr=tmp.GetBuffer(tmp.GetLength()*sizeof(wchar_t)); 6 WideCharToMultiByte(CP_ACP, 0, (LPCWSTR)ptr, -1, buf, sizeof(buf), NULL, NULL);