zoukankan      html  css  js  c++  java
  • 乱码问题

    发送http的post请求时,有时候会出现乱码。直接用utf8转换后依然是乱码,查阅多方资料并测试后发现需要用到URL解码。

    URL解码:

    java.net.URLDecoder.decode(vehicleno, "UTF-8")

    上面这是java客户端的问题。

    delphi客户端接收的时候,部分文字会出现部分乱码。中文后面跟数字的时候,比如'鄂999',这个鄂会变成乱码。而'鄂A999',不会出现乱码。

    这个很奇怪,只有部分是乱码。

    分析流程:

    1,服务端给客户端返回一个'鄂888'

    2,利用抓包工具,抓取java服务端返回给delphi客户端的结果。通过对比utf8的2进制,发现并无乱码。排除了服务端返回乱码的可能性,问题肯定出在客户端。

    3,分析客户端

    IdHttp.Request.CharSet := 'utf-8';
       IdHttp.Response.CharSet   := 'utf-8';
       ResponseStream := TStringStream.Create('utf-8');  //问题出在这句话。
       RequestList := TStringList.Create;
       try
         //Url := 'http://127.0.0.1:9000';
         Url := nvip;
         Url := Concat(Url,route);
         try
           RequestList.Add(Concat(name,'=',value));
           IdHttp.Post(Url,RequestList,ResponseStream);
    //........省略
       
    ResponseStr := ResponseStream.DataString;
       ResponseStr := UTF8Decode(ResponseStr);
    ResponseStream := TStringStream.Create('',TEncoding.UTF8);//替换成这句话后问题解决。
    //因为已经解码了
    ResponseStr := UTF8Decode(ResponseStr); 这句话也去掉。

    分析TStringStream的2个构造方法。

    constructor Create(const AString: string); overload;
    constructor Create(const AString: string; AEncoding: TEncoding; AOwnsEncoding: Boolean = True); overload;


    constructor
    TStringStream.Create(const AString: string); begin Create(AString, TEncoding.Default, False); end;

      constructor TStringStream.Create(const AString: string; AEncoding: TEncoding;
         AOwnsEncoding: Boolean);
      begin
        FEncoding := AEncoding;
        FOwnsEncoding := AOwnsEncoding and not TEncoding.IsStandardEncoding(AEncoding);
        inherited Create(FEncoding.GetBytes(AString));
      end;

  • 相关阅读:
    Flash中先获取flv的尺寸然后再显示的方法
    雕虫小艺:Slider控件的制作(Flash)
    用几十行代码写一个可以在PC Web,PC桌面,安卓,iOS上运行的程序
    仰望星空,结果南辕北辙
    Flash播放mp4的两个问题:编码问题和需要下载完后才能播放的问题
    只学一点点:我的技术学习策略
    2012年计划
    提高ipad浏览器下大尺寸xml文件解析的性能
    html5/haXe开发偶感
    支点:技术选择的精髓
  • 原文地址:https://www.cnblogs.com/feiyunaima/p/6322466.html
Copyright © 2011-2022 走看看