原因
wxPrintf里面调用的就是wprintf,现在用窄字符和宽字符的兼容问题,还涉及到编码格式。具体我也不懂
解决方案
- 文件编码GBK,代码之中设置local language,就可以了。
setlocale(LC_ALL, "");
- 文件编码UTF-8,如果像上面一样设置,不能完全解决问题。并且要和上面一致的话,需要对字符进行处理,转化成ascii。
- 可以用windows自带的转换。
wxString UTF8ToUnicode( const wxString& str )
{
int len = 0;
len = str.length();
int unicodeLen = ::MultiByteToWideChar( CP_UTF8,
0,
str.c_str(),
-1,
NULL,
0 );
wchar_t * pUnicode;
pUnicode = new wchar_t[unicodeLen+1];
memset(pUnicode,0,(unicodeLen+1)*sizeof(wchar_t));
::MultiByteToWideChar( CP_UTF8,
0,
str.c_str(),
-1,
(LPWSTR)pUnicode,
unicodeLen );
wxString rt;
rt = ( wchar_t* )pUnicode;
delete pUnicode;
return rt;
}
- 可以用wxWidgets的函数。
wxString str = wxString::FromUTF8("测试");
补充说明
不知道为啥会出现这个原因,有可能和我自己编译的wxWidgets的环境有关系。所以不一定能照搬照抄,但是具有一定的参考价值。
- 用utf-8的话建议切换成带bom的,不然也会有问题,单个字符的时候出错。
- 换成bom之后wxT就可以了,不用再转化成ascii编码。