VC 英文内码下中文字符串显示乱码
我的程序中用了一个ocx控件,控件中的一个方法从远端服务器(中文系统)取回一个类型为BSTR的字符串“区域”,如果客户端的语言为中文,可以在内存中看到接收到的为“3a53...
我的程序中用了一个ocx控件,控件中的一个方法从远端服务器(中文系统)取回一个类型为BSTR的字符串“区域”,如果客户端的语言为中文,可以在内存中看到接收到的为“3a 53 df 57”,而若果将客户端的语言改为英文,则内存中为“c7 00 f8 00 d3 00 f2 00” ,显示的为乱码,我在英文系统下将这个字符串发给服务器,服务器不能识别。请问我应当如何将“c7 00 f8 00 d3 00 f2 00”转换成“3a 53 df 57”?或者如何将个字符串处理后发给服务器使其能够识别
谢谢两位的解答 英文系统下的问题已经解决,但日文下出现了问题,下面是我的代码
//bstr 为从服务器(中文系统)取回的字符串“区域”
char *pch = _com_util::ConvertBSTRToString(bstr);
Ascci2Unicode(pch, ptch, iMaxLen);
delete[] pch;
int Ascci2Unicode(char* pch, TCHAR* ptch, int iMaxLen)
{
int nChar = MultiByteToWideChar(936, 0, pch, -1, NULL, 0);
wchar_t* pBuf = new wchar_t[nChar+1];
nChar = MultiByteToWideChar(936, 0, pch, -1, pBuf, nChar);
_tcsncpy_s(ptch, iMaxLen, pBuf, nChar);
return nChar;
}
日文系统下bstr 在内存中为 87 ff 72 e6
char *pch = _com_util::ConvertBSTRToString(bstr); 如此转换后的 pch 为 :c7 f8 d3 81
Ascci2Unicode() 转换后 ptch 为: 3a 53 fc 89,正确应该为:“3a 53 df 57”
为什么日文下有部分汉字没有正确转换?
汉字(中文系统) -> unicode(日文系统)->unicode(日文系统下的中文unicode)
第二步我该怎么做?也就是上一步的反转过程,似乎第一步这个过程中就有错误
因为BSTR是unicode的,因此第一步是系统自动完成,如果这个过程就出现错误,是否就不能反转回去? 展开
谢谢两位的解答 英文系统下的问题已经解决,但日文下出现了问题,下面是我的代码
//bstr 为从服务器(中文系统)取回的字符串“区域”
char *pch = _com_util::ConvertBSTRToString(bstr);
Ascci2Unicode(pch, ptch, iMaxLen);
delete[] pch;
int Ascci2Unicode(char* pch, TCHAR* ptch, int iMaxLen)
{
int nChar = MultiByteToWideChar(936, 0, pch, -1, NULL, 0);
wchar_t* pBuf = new wchar_t[nChar+1];
nChar = MultiByteToWideChar(936, 0, pch, -1, pBuf, nChar);
_tcsncpy_s(ptch, iMaxLen, pBuf, nChar);
return nChar;
}
日文系统下bstr 在内存中为 87 ff 72 e6
char *pch = _com_util::ConvertBSTRToString(bstr); 如此转换后的 pch 为 :c7 f8 d3 81
Ascci2Unicode() 转换后 ptch 为: 3a 53 fc 89,正确应该为:“3a 53 df 57”
为什么日文下有部分汉字没有正确转换?
汉字(中文系统) -> unicode(日文系统)->unicode(日文系统下的中文unicode)
第二步我该怎么做?也就是上一步的反转过程,似乎第一步这个过程中就有错误
因为BSTR是unicode的,因此第一步是系统自动完成,如果这个过程就出现错误,是否就不能反转回去? 展开
展开全部
MultiByteToWideChar()
WideCharToMultiByte()
这两个函数可以实现对于UNICODE 码和ASCII友的转换
将客户端的语言改为英文,则内存中为“c7 00 f8 00 d3 00 f2 00” , 这个是UNICODE码,只要调用了WideCharToMultiByte函数(具体的你查下MSDN就知道了),这样,就不会是乱码了。
补充:
关于你的问题,我到网络上找了一下,问题的答案可能是:
1 首先机器上要安装日文的字体
2 直接使用UNICODE表示日文
具体的我也不太清楚。 好像中日韩的使用的是同一UNICODE字符集,我也没有用过日语。。。
WideCharToMultiByte()
这两个函数可以实现对于UNICODE 码和ASCII友的转换
将客户端的语言改为英文,则内存中为“c7 00 f8 00 d3 00 f2 00” , 这个是UNICODE码,只要调用了WideCharToMultiByte函数(具体的你查下MSDN就知道了),这样,就不会是乱码了。
补充:
关于你的问题,我到网络上找了一下,问题的答案可能是:
1 首先机器上要安装日文的字体
2 直接使用UNICODE表示日文
具体的我也不太清楚。 好像中日韩的使用的是同一UNICODE字符集,我也没有用过日语。。。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询