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;
  
相关推荐
逝水无殇32 分钟前
C# 异常处理详解
开发语言·后端·c#
玖玥拾2 小时前
C# 语言进阶(十五)C# 游戏服务端 MySQL 数据库
服务器·开发语言·网络·数据库·mysql·c#
铅笔侠_小龙虾2 小时前
Rust 学习目录
开发语言·学习·rust
云泽8083 小时前
从零吃透 C++ 异常:抛出捕获、栈展开、异常重抛与编码规范详解
开发语言·c++·代码规范
灯澜忆梦3 小时前
GO---可见性规则
开发语言·golang
逝水无殇3 小时前
C# 文件的输入与输出详解
开发语言·数据库·后端·c#
这是个栗子4 小时前
前端开发中的常用工具函数(八)
开发语言·前端·javascript
凤凰院凶涛QAQ4 小时前
《Java版数据结构 & 集合类剖析》栈与队列:“push/pop 是栈的灵魂,offer/poll 是队列的骨架——四组 API,两种人生”
java·开发语言·数据结构
研☆香5 小时前
为什么变量声明在赋值前也能使用?—— 深入理解 JavaScript 变量提升与作用域
开发语言·前端·javascript
右耳朵猫AI5 小时前
PHP周刊2026W28 | 安全更新、Laravel 13.18、Twig 3.28
开发语言·php·laravel