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;

  • 相关阅读:
    javascript数组对象
    jquery、javascript实现(get、post两种方式)跨域解决方法
    js检查字符串的包含关系
    element——message消息提示
    js把mysql传过来的时间格式化为:0000-00-00 00:00:00
    beego orm操蛋问题:操作都需要主键
    element——message-box
    VUE.js全局变量的定义
    element el-upload组件获取文件名
    go遍历某个文件夹
  • 原文地址:https://www.cnblogs.com/feiyunaima/p/6322466.html
Copyright © 2011-2022 走看看