描述:
如题:
我用VC7做的一个控件
调用这个控件的函数,会返回一个中文的值给我的HTML页面显示,
在中文操作系统下能够正确显示,可在英文的操作系统下中文就
变成了乱码
当我在控件里面报一个MESSAGEBOX时显示,在英文的操作系统下面
也正确显示中文,可到了HTML页面里就成了乱码
IE的编码我也都做了各种尝试,但均未触发此问题,且直接写到页面
内的中文可以正确显示
解决方案1:
还有一个方法,就是编译unicode版本。unicode版本不需要转换,所以也不会乱码。
解决方案2: 刚才查了一下:MFC中CString的AllocSysString函数是根据系统当前内码来转换的,如果是在英文版,它就根据英文内码转换,所以结果是乱码。你可以试试用下面这段代码取得BSTR。
// return tmp.AllocSysString();
int nLen = MultiByteToWideChar(CP_THREAD_ACP, 0, tmp, tmp.GetLength(), NULL, NULL);
BSTR bstr = ::SysAllocStringLen(NULL, nLen);
MultiByteToWideChar(CP_THREAD_ACP, 0, m_tmp, tmp.GetLength(), bstr, nLen);
return bstr;
这是控件的interface中的方法吗?你是说哪个参数出错了?
我感觉还是控件里的问题,在不同的语言环境里出错。
你这个函数的参数全是LPCTSTR,不是BSTR啊。
这种情况多发生在窄字符和BSTR之间转换时指定的转换内码不正确。
你可以把整个程序发给我,或者做简化的例子。
单从这段程序看不出问题。
你的控件里是不是把char*转换成了BSTR?是怎么转换的?