为什么用idhttp取到的网站,用utf8toAnsi转换后,还是有些特殊字符乱码

cowboooo 2015-04-06 07:48:01
虽然大部份的中文已经解出,但是还有有几个乱码,
如何把54936改成65001,就完整的把UTF8显示出来了

可我想不用这种方式,直接转还有别的办法能不出现小乱码吗??



IdHTTP1 := TIdHTTP.Create;
ss := TStringStream.Create('', TEncoding.GetEncoding(54936));//默认为gb18030
idhttp1.Get('www.jobui.com',ss);//任意UTF8网站都这样
Memo1.text:= LowerCase(ss.DataString);//转出的字符全部统一小写

Memo2.text:=utf8toAnsi( Memo1.text);


...全文
3458 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
huyongi 2017-06-16
  • 打赏
  • 举报
回复
别用那个IDhttp了,问题太多了
joanagle 2017-06-07
  • 打赏
  • 举报
回复
引用 9 楼 doloopcn 的回复:
刚刚完美解决类似问题: uses IdURI; ...... Respon:=TidURI.URLDecode(Http.Get(TIdURI.URLEncode(URLStr))); 这样URLStr就不需要自己去编码和解码了,很好用,支持中西结合文,呵呵
学到了
xflidengqiang2008 2015-11-12
  • 打赏
  • 举报
回复
IdURI 在C++builder 怎么使用?
lyhoo163 2015-04-11
  • 打赏
  • 举报
回复
引用 9 楼 doloopcn 的回复:
刚刚完美解决类似问题: uses IdURI; ...... Respon:=TidURI.URLDecode(Http.Get(TIdURI.URLEncode(URLStr))); 这样URLStr就不需要自己去编码和解码了,很好用,支持中西结合文,呵呵
支持。。。。
doloopcn 2015-04-11
  • 打赏
  • 举报
回复
刚刚完美解决类似问题: uses IdURI; ...... Respon:=TidURI.URLDecode(Http.Get(TIdURI.URLEncode(URLStr))); 这样URLStr就不需要自己去编码和解码了,很好用,支持中西结合文,呵呵
tcmakebest 2015-04-10
  • 打赏
  • 举报
回复
UTF8转ANSI是什么概念, 转的时候要注意的是, 能够装在 UTF8里的水, 是不能装在篮子ANSI里的, 只能装到水桶ANSI里. ANSI就是只能装一种东西的容器, 所以不同语言有不同的ANSI. 不是同一种东西.
pathletboy 2015-04-07
  • 打赏
  • 举报
回复
也就是说,2007(不含)以后,显示unicode的编码,直接如下即可
  IdHTTP1 := TIdHTTP.Create;
  try
    Memo1.Text:= IdHTTP1.Get('http://www.jobui.com');
  finally
    IdHTTP1.Free;
  end;
pathletboy 2015-04-07
  • 打赏
  • 举报
回复
引用 2 楼 cowboooo 的回复:
[quote=引用 1 楼 pathletboy 的回复:]
  IdHTTP1 := TIdHTTP.Create;
  try
    Memo1.Text:= Utf8ToAnsi(IdHTTP1.Get('http://www.jobui.com'));
  finally
    IdHTTP1.Free;
  end;
这样并未发现乱码。
楼上兄弟,你试一下2010版,全是乱码[/quote] 2007(不含)以后,包括控件默认编码是unicode了,你一转,自然是乱码。
pathletboy 2015-04-07
  • 打赏
  • 举报
回复
引用 6 楼 cowboooo 的回复:
[quote=引用 4 楼 pathletboy 的回复:] 也就是说,2007(不含)以后,显示unicode的编码,直接如下即可
  IdHTTP1 := TIdHTTP.Create;
  try
    Memo1.Text:= IdHTTP1.Get('http://www.jobui.com');
  finally
    IdHTTP1.Free;
  end;
这样是可以,但是碰到GB2312的网页,显示就会乱码..[/quote]
引用 6 楼 cowboooo 的回复:
[quote=引用 4 楼 pathletboy 的回复:] 也就是说,2007(不含)以后,显示unicode的编码,直接如下即可
  IdHTTP1 := TIdHTTP.Create;
  try
    Memo1.Text:= IdHTTP1.Get('http://www.jobui.com');
  finally
    IdHTTP1.Free;
  end;
这样是可以,但是碰到GB2312的网页,显示就会乱码..[/quote] 你都能区别网页编码了,那就区别分情况转。
  IdHTTP1 := TIdHTTP.Create;
  try
    html:= IdHTTP1.Get('http://0512aj.cn');
    if IdHTTP1.Response.CharSet <> 'utf-8' then
      html := AnsiToUtf8(html);
    Memo1.Text := html;
  finally
    IdHTTP1.Free;
  end;
cowboooo 2015-04-07
  • 打赏
  • 举报
回复
引用 4 楼 pathletboy 的回复:
也就是说,2007(不含)以后,显示unicode的编码,直接如下即可
  IdHTTP1 := TIdHTTP.Create;
  try
    Memo1.Text:= IdHTTP1.Get('http://www.jobui.com');
  finally
    IdHTTP1.Free;
  end;
这样是可以,但是碰到GB2312的网页,显示就会乱码..
cowboooo 2015-04-06
  • 打赏
  • 举报
回复
引用 1 楼 pathletboy 的回复:
  IdHTTP1 := TIdHTTP.Create;
  try
    Memo1.Text:= Utf8ToAnsi(IdHTTP1.Get('http://www.jobui.com'));
  finally
    IdHTTP1.Free;
  end;
这样并未发现乱码。
楼上兄弟,你试一下2010版,全是乱码
pathletboy 2015-04-06
  • 打赏
  • 举报
回复
  IdHTTP1 := TIdHTTP.Create;
  try
    Memo1.Text:= Utf8ToAnsi(IdHTTP1.Get('http://www.jobui.com'));
  finally
    IdHTTP1.Free;
  end;
这样并未发现乱码。

828

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧