DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: majundada
今日帖子: 41
在线用户: 13
导航: 论坛 -> DELPHI技术 斑竹:liumazi,sephil  
作者:
男 zhouying (zy) ★☆☆☆☆ -
盒子活跃会员
2018/10/2 23:03:58
标题:
关于字符代码转换的问题 浏览:268
加入我的收藏
楼主: 一个网页是gb2312编码的,用idhttp抓取了相应的内容,通过label.caption.但是在英文系统里面,会显示成乱码,不是说delphi已经是union了吗。我用的是xe版本。或者记得之前好像有个转换函数UTF8STRING.不懂是不是这个。
----------------------------------------------
-
作者:
男 bahamut8348 (leonna) ▲▲▲▲▲ -
普通会员
2018/10/3 9:23:44
1楼: gb2312你理解成传统意义上的ansi.
要转换要用ansi去转
----------------------------------------------
--
作者:
男 sail2000 (小帆工作室) ★☆☆☆☆ -
盒子活跃会员
2018/10/3 11:34:56
2楼: TEncoding.Ansi
----------------------------------------------
delphi 是兴趣,和工作无关,即使它倒闭。
又不靠它 delphi 吃饭,怕甚?
作者:
男 zhouying (zy) ★☆☆☆☆ -
盒子活跃会员
2018/10/11 20:27:21
3楼: 楼上的兄弟有没有实例呢?
----------------------------------------------
-
作者:
男 iamdream (银河恒久远,梦想无止境!) ★☆☆☆☆ -
大贡献会员
2018/10/11 21:21:09
4楼: 首先,你得用Ansi来转;其次,如果你的英文系统里没装中文字库,那也显示不出来(乱码)。
----------------------------------------------
-广袤璀璨的银河,永无止境的梦想(梦无止境游银河) 偶的生活博客  偶的技术军事博客
作者:
男 hs_kill (lzl_17948876) ▲▲▲▲▲ -
普通会员
2018/10/12 9:01:33
5楼: 网页编码改成UTF-8吧  GB2312在没装相关中文编码的windows上是无法显示的
----------------------------------------------
http://www.cnblogs.com/lzl_17948876/
作者:
男 wang_80919 (Flying Wang) ▲▲▲▲△ -
普通会员
2018/10/12 9:23:54
6楼: 我老早就写了 跨平台 idhttp get ,支持多种编码。你服务器 用什么编码,我客户端都能显示出 HTML 内容。
当然,你服务器必须诚实,不能各种编码混合发。
----------------------------------------------
(C)(P)Flying Wang
作者:
男 zhouying (zy) ★☆☆☆☆ -
盒子活跃会员
2018/10/13 20:28:50
7楼: 那个抓取的网页就是我自己写的。@hs_kill ,如果我网页编码改成UTF-8的话,用IDhttp抓取出来的就是乱码了
----------------------------------------------
-
作者:
男 bmsr (白忙剩人) ▲▲▲▲▲ -
普通会员
2018/10/15 15:02:06
8楼: 不要抓到string,要抓到stream了转完,再转成string

var
  Aurl: string;
  Response: IHTTPResponse;
  ms: TMemoryStream;
  rbs: RawByteString;
  AHtml: string;
  s: string;
begin
  ms := TMemoryStream.Create;
  try
    Aurl := 'https://xxxx';
    Response := NetHTTPClient1.Get(Aurl, ms);
    ms.Position := 0;
    SetLength(rbs, ms.Size);
    ms.Read(rbs[1], ms.Size);
    AHtml := UTF8ToString(rbs);
  finally
    ms.Free;
  end;
end;
这样就不会有任何乱码了
----------------------------------------------
http://blog.sina.com.cn/bmsrnote
作者:
男 wang_80919 (Flying Wang) ▲▲▲▲△ -
普通会员
2018/10/15 15:07:27
9楼: 有本事地址发来,我用群里的 DEMO 给你 idhttp1.get 一下截图给你看。
----------------------------------------------
(C)(P)Flying Wang
作者:
男 sail2000 (小帆工作室) ★☆☆☆☆ -
盒子活跃会员
2018/10/16 10:38:47
10楼: 网页字符不要用 TMemoryStream,
用这个比较方便
此帖子包含附件:
PNG 图像
大小:75.2K
----------------------------------------------
delphi 是兴趣,和工作无关,即使它倒闭。
又不靠它 delphi 吃饭,怕甚?
作者:
男 zhouying (zy) ★☆☆☆☆ -
盒子活跃会员
2018/10/22 20:42:53
11楼: 回楼上,我就是用的stringstream.但是在非中文系统上就是乱码
idhttp2 :=TIdHTTP.Create(Self);
        rStream:= TStringstream.Create;
        IdHTTP2.Get(website+'cn.html',rStream);
        astr := rStream.DataString;
        astr3:=copy(astr,pos('<h4>',astr)+4,500);
        update:=copy(astr3, 1,pos('</h4>', astr3)-1);

网页格式是这样的
<html xmlns="http://www.w3.org/1999/xhtml";>
<head>
<meta http-equiv="Content-Type" con_tent="text/html; charset=gb2312" />
<title></title>
</head>
<body>
<h4>停止更新</h4>
...
----------------------------------------------
-
作者:
男 wang_80919 (Flying Wang) ▲▲▲▲△ -
普通会员
2018/10/22 21:42:59
12楼: 如果你用 D7,那么肯定非中文系统乱码。
新版本 是很简单的。

rStream:= TStringstream.Create(TEncoding.XXXXX('GBK'));

这个 XXXXX 就是对白痴的处罚。
我相信,正常人都能把 XXXXX 改成正确的代码。

不过,这样有个小问题。会导致 内存泄露。

怎么解决 泄露,也是很简单。只有白痴不会解决。
----------------------------------------------
(C)(P)Flying Wang
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v2.1 版权所有 页面执行7.8125毫秒 RSS