DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
lazarus/fpc/Free Pascal
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: cdk19821
今日帖子: 35
在线用户: 10
导航: 论坛 -> 网络通讯 斑竹:liumazi,sephil  
作者:
男 lblzms (lblzms) ★☆☆☆☆ -
普通会员
2009/10/20 16:49:11
标题:
IdHttp和Servlet通讯的字符编码问题,愁死了!!! 浏览:2057
加入我的收藏
楼主: 最近要开发一个项目,涉及idhttp与servlet通讯,我用post向servlet发送一串字符串:
procedure TfrmMain.RzButton1Click(Sender: TObject);
var
  GetStream: TMemoryStream;
  slst: TStringList;
begin
  GetStream := TMemoryStream.Create;
  slst :=  TStringList.Create;
  slst.Clear;

  slst.Add(Trim(self.edt2.Text));
  try
     self.IdHTTP.Post(Trim(self.edt1.Text),slst,GetStream);
  finally
     slst.Free;
     strStream.Free;
     GetStream.Free;
     self.WriteLog(self.IdHTTP.Response.Server+': '
          +self.IdHTTP.Response.ResponseText,0);
  end;
end;  

self.edt2.Text的内容是:
<NetDataQuery><EventID>2009322935092485391CNNOKIAWAP001</EventID><OperationTarget>HPR白名单</OperationTarget></NetDataQuery>

但服务器接受后中文乱码,就是“白名单”会乱码,那边的人说要把字符串转成gb2312或gbk发送,我在网上找了许久也没找到如何转,请教各位盒友有什么方法没?在下感激不尽!
----------------------------------------------
-
作者:
男 xingzj0117 (SUNAGE) ★☆☆☆☆ -
盒子活跃会员
2009/10/20 18:50:51
2楼: 用TStringStream来post

self.IdHTTP.Post(Trim(self.edt1.Text),TStringStream.Create(self.edt2.Text),GetStream);
----------------------------------------------
-
作者:
男 tiny_bird (delphi_tokyo) ★☆☆☆☆ -
盒子活跃会员
2009/10/20 20:02:10
3楼: 呵呵,别发愁,其实很好办。所有中文字段用base64编码一下就OK啦,当然所有字段都base64编码也行。DELPHI里需要引用EncdDecd单元,delphi里需要用的两个函数DecodeString(),EncodeString()

java端需要引用两个库
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;

  public static String EncodeStr(String src) {
    return (src == null) ? "" : encodeBASE64(src);
  }
  public static String DecodeStr(String src) {
    return (src == null) ? "" : decodeBASE64(src);
  }
----------------------------------------------
winsock api,通讯,多线程,VCL,Java
作者:
男 lblzms (lblzms) ★☆☆☆☆ -
普通会员
2009/10/21 14:01:15
4楼: 关键是服务器端不归我管,不能改动,只能从我的程序入手,TStringStream也试过还是会乱码
----------------------------------------------
-
作者:
男 soarowl (soarowl) ★☆☆☆☆ -
盒子活跃会员
2009/10/21 16:25:06
5楼: 看看我的例子:

class function TCrawler.GetUrlContent(const url: string; const Encoding: TEncoding): string;
var
  http: TIdHTTP;
  stream: TStringStream;
begin
  http := TIdHTTP.Create(nil);
  stream := TStringStream.Create('', Encoding, False);
  try
    http.Request.UserAgent :=
      'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727)';
    http.Get(url, stream);
    Result := stream.DataString;
  finally
    stream.Free;
    http.Free;
  end;
end;

//调用
data := GetUrlContent(url,TEncoding.Default);
data := TCrawler.GetUrlContent(url, TEncoding.UTF8);
----------------------------------------------
-
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v3.0.1 版权所有 页面执行62.5毫秒 RSS