最近要开发一个项目,涉及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;
     GetStream.Free;
     self.WriteLog(self.IdHTTP.Response.Server+': '
          +self.IdHTTP.Response.ResponseText,0);
  end;
end;  slst的内容是:
<NetDataQuery><EventID>2009322935092485391CNNOKIAWAP001</EventID><OperationTarget>HPR白名单</OperationTarget></NetDataQuery>但服务器接受后中文乱码,就是“白名单”会乱码,那边的人说要把字符串转成gb2312或gbk发送,我在网上找了许久也没找到如何转,请教各位坛友有什么方法没?在下感激不尽!

解决方案 »

  1.   

    这种情况,你得在Servlet代码做处理吧,之前用到的一个转换函数,你看看有没有用
    public class ChStr {
    public static String toChinese(String strvalue) {
    try {
    if (strvalue == null) { //当变量strvalue为null时
    strvalue="";
    return strvalue;//将变量strvalue赋值为空
    } else {
    System.out.println(strvalue);
    System.out.println("***************");
    byte[]   byteStr=strvalue.getBytes("ISO8859-1"); 
    //strvalue = new String(strvalue.getBytes("iso-8859-1"),"gb2312");//将字符串转换为GBK编码
    //strvalue = strvalue.trim(); //去除字符串的首尾空格
    System.out.println(new String(byteStr,"gb2312"));
    return   new String(byteStr,"gb2312"); 
    }
    } catch (Exception e) {
    strvalue=""; //将变量strvalue赋值为空
    return strvalue;
    }
    //返回转换后的输入变量strvalue
    } // 处理字符串中的空值
    public static final String nullToString(String v, String toV) {
        if (v == null || "".equals(v)) { //当输入变量v为空时
            v = toV; //将输入变量v赋值为输入变量toV
        }
        return v; //返回转换后的输入变量v
    }
    //过滤危险字符
    public static final String filterStr(String str){
    str=str.replaceAll(";","");
    str=str.replaceAll("&","&amp;");
    str=str.replaceAll("<","&lt;");
    str=str.replaceAll(">","&gt;");
    str=str.replaceAll("'","");
    str=str.replaceAll("--"," ");
    str=str.replaceAll("/","");
    str=str.replaceAll("%","");
    return str;
    }
    }
      

  2.   

      Request :=TStringStream.Create(slst);
      idhttp.post(url,Request,GetStream);这样试试,没搞过这个。
      

  3.   

    同样郁闷,服务器端不能修改,只能从客户端下手。通过ANSI->UNICODE->GB2312的转换也不行