首页 新闻 赞助 找找看

[c++]ascii转utf8后中文变乱码

0
悬赏园豆:10 [已解决问题] 解决于 2014-03-21 17:14
View Code
 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

让代码飞一会儿的主页 让代码飞一会儿 | 初学一级 | 园豆:196
提问于:2012-08-14 00:14
< >
分享
最佳答案
0

Winows不支持utf-8编码的字符的显示,需要转换为utf-16或者ansi编码才能正确显示。

收获园豆:10
秋天的栗树 | 菜鸟二级 |园豆:216 | 2012-08-28 20:05
其他回答(2)
0

这个不应用WideCharToMultiByte转,这个是URL编码的问题,使用UrlEncode UrlDecode这些函数才行

2012 | 园豆:21228 (高人七级) | 2012-08-14 08:26

这与url无关, 随便将url改为中文字符串,结果都是乱码

支持(0) 反对(0) 让代码飞一会儿 | 园豆:196 (初学一级) | 2012-08-14 12:19

@学习中的伪菜鸟: 

 http://hi.baidu.com/_%E2d_%B7%B3_%DE%B2%C2%D2 这个不是unicode串,unicode是WCHAR的,2个字节
支持(0) 反对(0) 2012 | 园豆:21228 (高人七级) | 2012-08-14 16:38

@2012:

"地址:http://hi.baidu.com/_%E2d_%B7%B3_%DE%B2%C2%D2" //只是我的一个测试用的字符串.
假如我将该字符串换为任意中文字符串比如"地址"

转换结果仍为乱码
支持(0) 反对(0) 让代码飞一会儿 | 园豆:196 (初学一级) | 2012-08-14 16:54

@学习中的伪菜鸟:  明白了,输出乱码是可能的【需要看控制台或其他输出是什么编码的设置】,你看看内存中的字节是否对的就行,使用记事本存为不同的编码,然后二进制查看这些字节内容,中文1个字会转为3个字节

支持(0) 反对(0) 2012 | 园豆:21228 (高人七级) | 2012-08-14 18:18
0

AtlEscapeUrl

Launcher | 园豆:45045 (高人七级) | 2012-08-14 09:04
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册