如果工程属性chart set项有两种字符编码方式:Multi-Byte 、Unicode。
不同的编码方式对字符的处理方式是不同的。
今天在编码的时候出现字符编码转换的问题,解决后记录为此博文。
用到一个函数,它的参数必须是char*类型,而我工程属性设置了Unicode(默认)。
如果强制类型转换:
CString s = “abc”;
char *ch;
ch = (cahr*)s.GetBuffer(s.GetLength); //or ch = (LPCSTR)(LPCTSTR)s;
这样得到的ch = “a0b0c0”;
s中的‘a’占两个字节,转换到ch中'a'占一个字节。
strlen(ch) == 1;
为解决以上问题,找到以下的方法:WideCharToMultiByte() / MultiByteToWideChar()
CString s = ”abc“;
char msg[1024];wchar_t* wmsg = s.GetBuffer(s.GetLength());
WideCharToMultiByte(CP_ACP,0,wmsg,s.GetLength(),msg,1024,NULL,NULL);
msg[s.GetLength()] = '\0';