目录

一、问题的起因

二、问题分析

三、问题解决


一、问题的起因

最近在更新新版本的系统, 有个系统用的是Delphi2007写的,Delphi2007调用了一个post接口,但是无论怎么处理,中文给到第三方的都是乱码。

代码如下:

class function OtherCommonAdapter.postInfos_2(strData, url: string): string;varstream: Tmemorystream;IdHTTP1: Tidhttp;begintryIdHTTP1 := TidHTTp.create(nil);IdHTTP1.AllowCookies := True;IdHTTP1.HTTPOptions := [hoKeepOrigProtocol, hoForceEncodeParams, hoInProcessAuth];IdHTTP1.ProtocolVersion := pv1_1;IdHTTP1.Request.Accept := '*/*';IdHTTP1.Request.UserAgent := 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0)';IdHTTP1.Request.ContentLength := -1;IdHTTP1.Request.Connection := 'Keep-Alive';IdHTTP1.Request.CacheControl := 'no-cache';IdHTTP1.Request.ContentType := 'application/json';stream := TMemoryStream.Create;strData := AnsiToUTF8(strData);hoapplication.WriteLog(0, '发送的参数','http_detail>>>>>>>>' , 'url=' + url + ',  data=' + strData  );stream.Write(PChar(strData)[0], Length(strData));result := UTF8Decode(IdHTTP1.Post(url, stream));hoapplication.WriteLog(0, '返回的参数','http_detail>>>>>>>>' ,  '  result=' + result  );finallyFreeAndNil(stream);FreeAndNil(IdHTTP1);end;end;

二、问题分析

之前的Delphi2007版本代码使用没问题, Delphi XE却出现了中文乱码错误,即使在传输流之前加入utf8encode也不行。

所以问题只可能出现在stream.Write(PChar(strData)[0], Length(strData));字符流的加载这块,

可能在之前的转码其实都无效, 没有加载正确的中文字符集

三、问题解决

DelphiXE版本的post需要在发送的流的时候指定好字符的中文编码才有效:

class function OtherCommonAdapter.postInfos(strData, url,sContentType: string): string;
varjsonToSend: TStringStream;IdHTTP2: Tidhttp;
begintryIdHTTP2 := TidHTTp.create(nil);IdHTTP2.AllowCookies := True;IdHTTP2.HTTPOptions := [hoKeepOrigProtocol, hoForceEncodeParams, hoInProcessAuth];IdHTTP2.ProtocolVersion := pv1_1;IdHTTP2.Request.Accept := '*/*';IdHTTP2.Request.UserAgent := 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36';IdHTTP2.Request.ContentLength := -1;IdHTTP2.Request.Connection := 'keep-alive';IdHTTP2.Request.CacheControl := 'no-cache';IdHTTP2.Request.ContentType :=sContentType;hoapplication.WriteLog(0, '发送的参数','http_detail>>>>>>>>' , 'url=' + url + ',  data=' + strData  +  '  ,ContentType= ' + sContentType);strData := utf8encode(strData);jsonToSend := TStringStream.Create(strData, TEncoding.UTF8);jsonToSend.Position := 0; // 将流位置置为0result := IdHTTP2.Post(url, jsonToSend);hoapplication.WriteLog(0, '返回的参数','http_detail>>>>>>>>' ,  '  result=' + result  );finallyFreeAndNil(jsonToSend);FreeAndNil(IdHTTP2);end;end;

同时要注意:有些接口的接收端,只支持TStringStream的流, 不支持Tmemorystream流,这也可能导致post的调用失败。

Delphi XE post中文乱码问题处理相关推荐

  1. 服务器不能显示中文,彻底解决delphi WebBroker服务器中文乱码 delphi WebBroker服务器不能显示中文网页 WebBroker中文显示乱码...

    彻底解决delphi WebBroker服务器中文乱码 彻底解决WebBroker中文显示乱码 彻底解决delphi WebBroker服务器不能显示中文网页 这个问题被折腾惨啦! 网上一大堆,就没能 ...

  2. 关于Ansi版Delphi剪切板中文乱码的问题

    Ansi版Delphi的剪贴板也是用Ansi字符串实现的,Clipboard.AsText是用CF_TEXT方式,设置和获取的都是AnsiString类型,处理中文时就是乱码,直接改Clipbrd单元 ...

  3. delphi mysql 乱码_Delphi连接mysql中文乱码的解决办法

    MySQL数据库不常使用,以往使用都是连接已有的数据库,从未出现乱码问题.这次做到演示版的程序,需要自己建立MySQL数据库,而使用Delphi连接时,凡是数据库中文内容都显示为"???&q ...

  4. Delphi XE 使用 MySQL 数据库一个奇怪的问题

    Delphi XE 使用 MySQL 数据库一个奇怪的问题 我用的是自带的 ADO 组件连接 MYSQL ,连接很简单,如下: 1.下载一个 MYSQL 驱动安装上 下载地址 2.连接串 Adoc.C ...

  5. delphi XE 10实现App和PC下TreeView调用ImageList和Sqlite数据

    delphi XE 10实现App和PC下TreeView调用ImageList和Sqlite数据 一.工程 program TreeView; usesSystem.StartUpCopy,FMX. ...

  6. pyscripter与python的关系_详解python开发环境PyScripter中文乱码问题解决方案

    PyScripter是一个使用Delphi开发的开源的Python集成开发环境(IDE),PyScripter支持Python2.4.2.5.2.6.2.7.3.0.3.1.3.2,而且可以根据需要切 ...

  7. Delphi7 To Delphi XE的变化

    Delphi7转移到Delphi XE, 从代码上看,一个变化就是对Unicode(从此用Delphi编写乱码的问题,国际化问题算是彻底解决了). 特别是代码中喜欢用PChar的同学要注意了,在XE中 ...

  8. Delphi7升级到Delphi 2010、Delphi XE、Delphi XE2总结 .

    Delphi7升级到Delphi 2010.Delphi XE.Delphi XE2总结 这两天把一个使用Delphi2007成功升级到了Delphi2010.升级途中很艰辛,总结了 以下经验与大家分 ...

  9. delphi7的程序在英文系统下显示中文乱码

    关于delphi的程序在英文操作系统下乱码问题 由于delphi7编译的程序是非unicode程序(代码页),所有在英文操作系统下会有乱码的问题. 解决方法: 1. 首先在Lageuage中选&quo ...

最新文章

  1. MySQL中char与varchar的区别
  2. 两块 硬盘 主从盘跳线详解
  3. [图神经网络] 图节点Node表示---GraphSAGE与PinSAGE
  4. static和const
  5. SDUT OJ 效率至上(线段树)
  6. C语言:编写一个程序,从键盘读入一个矩形的两个边的值(整数),求矩形面积
  7. (ZT)算法杂货铺——分类算法之朴素贝叶斯分类(Naive Bayesian classification)
  8. 阶段3 1.Mybatis_09.Mybatis的多表操作_1 mybatis表之间关系分析
  9. html5网页制作代码 大学生网页制作作业代码 (旅游网站官网滚动模板)
  10. 测试用例设计方法_场景法(游戏向)
  11. 鸿蒙系统红米可以升级吗,小米、红米手机能刷鸿蒙系统吗?小米红米刷鸿蒙系统教程...
  12. Arcgis使用教程(六)ARCGIS空间数据查询
  13. 主流深度学习CTR模型
  14. 软件工程 | 第六章 系统集成与测试
  15. 如果你恨一个人...
  16. Spring框架学习 思维导图
  17. 第三方互联网支付的主要类型
  18. 学网页平面UI设计,我选择广州传智播客
  19. CF 371D Vessels 【并查集】
  20. freeswitch的呼叫中心模块——mod_callcenter

热门文章

  1. 生产环境中 Ngx_lua 使用技巧和应用的范例 - 推酷
  2. dhcp服务(dhcp服务异常是什么原因)
  3. java课程设计-音乐播放器_Java程序设计课程设计报告音乐播放器
  4. UE5遇到255错误代码:ShaderCompileWorker Win64 Development -Quiet“ -WaitMutex -FromMsBuild已 退出,代码为 255。
  5. 微信小程序——订单列表显示全部和收起功能
  6. 贝尔曼方程动态规划python,【强化学习】马尔科夫决策过程之Bellman Equation(贝尔曼方程)...
  7. HTML画布太阳代码,用HTML5的canvas画太阳系
  8. 网站设计的思考网页版面布局的原理
  9. 浏览器不能下载软件和文件
  10. 加速区块链、混合云、开源领域创新 主机用户社区探索跨界合作