1 const char* pAsciiStr = "地址:http://hi.baidu.com/_%E2d_%B7%B3_%DE%B2%C2%D2"; 2 int size=MultiByteToWideChar(CP_ACP,0,pAsciiStr,-1,NULL,0); 3 wchar_t *result=new wchar_t[size+1]; 4 if(!MultiByteToWideChar(CP_ACP,0,pAsciiStr,-1,result,size)) 5 { 6 return false; 7 } 8 9 size = WideCharToMultiByte(CP_UTF8, 0, result, -1, 0, 0, 0, 0); 10 char *szChar=new char[size]; 11 memset(szChar,0,size); 12 WideCharToMultiByte(CP_UTF8, 0, result, -1, szChar,size , 0, 0); 13 cout << szChar; 14 delete []szChar; 15 delete []result;
ascii转utf8之后"地址"输出的是乱码?
win7中文+vs2010sp1 工程的字符集设置为unicode
Winows不支持utf-8编码的字符的显示,需要转换为utf-16或者ansi编码才能正确显示。
这个不应用WideCharToMultiByte转,这个是URL编码的问题,使用UrlEncode UrlDecode这些函数才行
这与url无关, 随便将url改为中文字符串,结果都是乱码
@学习中的伪菜鸟:
http://hi.baidu.com/_%E2d_%B7%B3_%DE%B2%C2%D2 这个不是unicode串,unicode是WCHAR的,2个字节
@2012:
"地址:http://hi.baidu.com/_%E2d_%B7%B3_%DE%B2%C2%D2" //只是我的一个测试用的字符串.
假如我将该字符串换为任意中文字符串比如"地址"
转换结果仍为乱码
@学习中的伪菜鸟: 明白了,输出乱码是可能的【需要看控制台或其他输出是什么编码的设置】,你看看内存中的字节是否对的就行,使用记事本存为不同的编码,然后二进制查看这些字节内容,中文1个字会转为3个字节
AtlEscapeUrl