Delphi 7 IdHTTP POST 中文乱码得解决

WEB后台使用UTF-8进行编码,由于D7默认是ansiString,直接提交到后台会使中文乱码。

解决方法:

1.先把AnsiString转WideString

2.通过System单元中的ansitoUTF8()函数进行转换之后再提交就可以了。

代码示例:

Delphi 复制代码
procedure postDemo();
var
  AURL: String;
  APostList: TStringList; // 提交参数List
  APostStream : TStringStream; // 流提交
  APostWideString:WideString;
  AResponseStream: TStringStream; // 接收流
  AResponse: String;
begin
  AURL:=''; // 接口地址
  AResponseStream := TStringStream.Create('');
  APostList:= TStringList.Create; 
  APostList.add('user=测试');
  APostList.add('id=123456');
  APostList.add('code=HA123');
  APostWideString := APostList.text;
    
  APostStream :=TStringStream.Create(ansitoUTF8(APostWideString));

  try 
    // WideString 调用ansitoUTF8进行UTF-8编码才行
    APostList.text := ansitoUTF8(APostWideString);

    IdHTTP.Request.ContentType := 'application/x-www-form-urlencoded; Charset=UTF-8';

    // List 提交
    IdHTTP.Post(AURL, APostList, AResponseStream);

    // 字符串提交
    IdHTTP.Post(AURL, ansitoUTF8(APostWideString), AResponseStream);

    // 流提交
    IdHTTP.Post(AURL, APostStream, AResponseStream);

    // AResponse 接收到的返回用UTF-8解码
    AResponse := UTF8toansi( AResponseStream.DataString );
    
  finally
    APostList.Clear;
    APostList.Free; 
    APostStream.Free;
    AResponseStream.Free;
  end; 

end;
  
相关推荐
fouryears_234172 小时前
Flutter InheritedWidget 详解:从生命周期到数据流动的完整解析
开发语言·flutter·客户端·dart
我好喜欢你~2 小时前
C#---StopWatch类
开发语言·c#
lifallen4 小时前
Java Stream sort算子实现:SortedOps
java·开发语言
IT毕设实战小研4 小时前
基于Spring Boot 4s店车辆管理系统 租车管理系统 停车位管理系统 智慧车辆管理系统
java·开发语言·spring boot·后端·spring·毕业设计·课程设计
cui__OaO5 小时前
Linux软件编程--线程
linux·开发语言·线程·互斥锁·死锁·信号量·嵌入式学习
鱼鱼说测试6 小时前
Jenkins+Python自动化持续集成详细教程
开发语言·servlet·php
艾莉丝努力练剑6 小时前
【洛谷刷题】用C语言和C++做一些入门题,练习洛谷IDE模式:分支机构(一)
c语言·开发语言·数据结构·c++·学习·算法
CHEN5_026 小时前
【Java基础面试题】Java基础概念
java·开发语言
杜子不疼.8 小时前
《Python学习之字典(一):基础操作与核心用法》
开发语言·python·学习
落霞的思绪8 小时前
Java设计模式详细解读
java·开发语言·设计模式