Delphi2009的Bug:WinSocket元件接收和发送的编码不一致(在Delphi XE版本中已做修改)

Delphi TCPIP通信 实例 解决中文乱码问题 敝人近期整理的客户端与服务端通信实例,数据编码约定采用UTF-8编码,解决中文乱码问题.ServerSocket组件可以同时接受一个或多个ClientSocket组件的连接请求,并与每个ClientSocket组件建立单独的连接,进行单独的通信。因此,一个服务器端可以为多个客户端服务 立即下载

Delphi2009的Bug:WinSocket元件接收和发送的编码不一致

转载自:http://multilanguage.tech.topzj.com/archiver/tid-14132.html

 

Delphi2009的Bug:WinSocket元件接收和发送的编码不一致
delphi2009,版本12.0.3155.16733,Socket元件的发送接受字串有一个bug,可能是支持unicode时漏改了。

在Delphi XE版本中已做修改。

ScktComp.pas

发送用Ansi码

function TCustomWinSocket.SendText(const s: AnsiString): Integer;
begin
  Result := SendBuf(Pointer(S)^, Length(S) * SizeOf(AnsiChar));
end;

接收用Unicode码
function TCustomWinSocket.ReceiveText: string;
begin
  SetLength(Result, ReceiveBuf(Pointer(nil)^, -1));
  SetLength(Result, ReceiveBuf(Pointer(Result)^, Length(Result)));
end;

可以这样来修正它。
1、简单的修改,都用Ansi

直接把function TCustomWinSocket.ReceiveText: string;改成function TCustomWinSocket.ReceiveText: AnsiString;

2、都用Unicode

function TCustomWinSocket.SendText(const s: String): Integer;
begin
  Result := SendBuf(Pointer(S)^, Length(S) * SizeOf(Char));
end;

function TCustomWinSocket.ReceiveText: string;
begin
  SetLength(Result, ReceiveBuf(Pointer(nil)^, -1) div SizeOf(Char));
  SetLength(Result, ReceiveBuf(Pointer(Result)^, Length(Result)*SizeOf(Char)) div SizeOf(Char));
end;

ScktComp.pas是在rtl.bpl,所以无法重编译rtl.dpk。删掉lib下的ScktComp.dcu。如果你的程序不用RuntimePackage编译的化修改没问题,否则没办法,只能改用SendBuffer或SendStream来发送。

 

 

若依框架集成saToken 若依版本3.8.8,鉴权采用security框架,这种框架太重,项目中想实现对外提供接口功能。尽快减少修改原框架的逻辑基础上,采用satoken实现。 阅读详情

相关推荐

保姆级图解:FD-SOI工艺流程中的关键三步(外延生长、应变硅、HKMG)

本文详细解析了FD-SOI工艺流程中的三大关键技术:外延生长、应变硅工程和HKMG集成。通过选择性外延生长技术优化接触电阻,利用应变硅提升载流子迁移率,并结合先栅高k金属栅工艺实现精准栅极控制,FD-SOI技术在智能手机处理器和自动驾驶芯片制造中展现出卓越的低功耗与高性能平衡。

weixin_29267307的博客 490

delphi 字符串转unicode

数字签名=B3496D7AE98FF3E2AF5BFD9BF43DDF24。{字符串转unicode} if s = ‘’ then exit;采集日期=2023-11-23 15:40:58。采集软件=MKM - 我的知识管理。关键字=字符串转unicode。

fogbow622的博客 832

Clion编译stm32cube初始化工程时non constant or forward reference address expression for section .ARM.extab报错

相信应该有同学在看了稚晖君关于clion开发stm32的文章之后也想在自己PC上实现“优雅の嵌入式开发”遇到和我类似的问题。他的文章是22年写的,我个人猜测应当是版本更新导致的不适配。意思就是说 READONLY 只能在gcc11以后的版本中使用,gcc10及以前的版本将无法正确识别,也就有如下错误。或者就可以将gcc升级至最新的版本。记得在clion工具链中修改c,cpp编译器的位置。可以将文本括号中的 READONLY 全部删除。当时由于没有注意到这行注释导致在这里卡了好久。

2301_77256849的博客 2512

Delphi和JAVA用UTF-8编码进行Socket通信例子

最近的项目(Delphi开发),需要经常和java语言开发的系统进行数据交互(Socket通信方式),数据编码约定采用UTF-8编码。 令我无语的是:JAVA系统那边反映说,Delphi发的数据他们收到是乱码,而我这边(Delphi7,ANSI)收到的数据将utf-8转码成ansi也是乱码。 因为不太熟悉java语言,还曾经怀疑是不是Delphi的utf-8编码和java语言的不一样。 最近...

weixin_34307464的博客 377

什么是以太网链路聚合

以太网链路聚合技术通过将多个物理端口捆绑成逻辑端口,可显著提升网络性能。该技术能增加总带宽(各链路带宽之和)、提高可靠性(故障秒级切换)并实现智能负载分担。主要分为手工模式和基于LACP协议的动态模式,后者能检测链路故障更可靠。配置时需确保接口参数一致、模式匹配,适用于核心交换、服务器接入等场景。华为设备通过创建Eth-Trunk接口、指定LACP模式并添加成员接口即可完成部署。这项成熟技术能以低成本解决带宽瓶颈和可靠性问题,是构建高速稳定网络的关键方案。

lai_2020的博客 674

QGIS|如何将WGS84转换为CGCS 2000坐标系?

QGIS 3中如何将WGS84转换为国家2000大地坐标系? 今天来回答一位朋友在后台留言提出的问题:怎么将WGS84坐标转换为国家2000大地坐标系。 01工程坐标系 从地图窗口右下角的状态栏可以看到当前地图窗口的坐标系,即工程坐标系(Project CRS)。当前地图可以由多个图层组成,各种来源数据的坐标参照系(Layer CRS)并不一定相同,QGIS在绘制图层之前将根据工程坐标系进行动态坐标转换,然后显示在地图画布中。 因此,在处理空间数据的过程中,一定要特别注意...

QGISClass的博客 1万+

Delphi2009的WinSocket元件接收和发送的编码不一致

delphi2009,版本12.0.3155.16733 ScktComp.pas 发送用Ansi码function TCustomWinSocket.SendText(const s: AnsiString): Integer;begin  Result := SendBuf(Pointer(S)^, Length(S) * SizeOf(AnsiChar));end; 

華華的博客 1430

PostgreSQL中idle in transaction状态的5个隐藏危害及实战解决方案

本文深入剖析了PostgreSQL中`idle in transaction`连接状态的五大隐藏危害,包括内存与锁泄漏、VACUUM受阻导致表膨胀、事务ID加速消耗、连接池资源耗尽以及增加故障排查复杂度。文章提供了基于`pg_stat_activity`视图的监控方法、识别高危事务的SQL脚本,并给出了从数据库参数调优(如设置`idle_in_transaction_session_timeout`)到应用层编码规范与连接池配置的完整实战解决方案。

zzz56的博客 234

socket接收服务器数据,输出为乱码或无法输出的解决方法

最近在做一个socket的小项目,其中出现了一个问题,就是当我用socket接收到服务器发送的数据后,无法输出接收到的数据或者输出的数据为乱码,经过几天的摸索,终于解决了这个问题,记录一下。不多说,直接上代码 public class client { public static final String IP_ADDR = "**.**.**.**";//服务器地址 public s

hhh_hh_h的博客 9446

SAP Integration Suite 与 SAP Cloud Integration 的关系解析

SAP Cloud Integration是SAP Integration Suite套件的核心组件,专注于消息与流程集成。两者关系可概括为:Integration Suite是SAP BTP上的集成平台套件(iPaaS),而Cloud Integration是其中负责应用与B2B集成的关键能力。日常所说的"CPI"实际指代的是Integration Suite中的Cloud Integration功能。该套件还包含API管理、事件网格等其他集成能力,共同构成企业集成解决方案。理解这一层

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 592

第三节:Vben Admin登录对接后端login接口

上一节,我们梳理的Vben Admin登录功能接口的逻辑,本节开始正式开启后端的开发后端我们采用Python的Flask项目,Flask-SQLAlchemy管理数据库模型,Flask-Migrate进行模型迁移。参考版本如下:Flask3.0.23.1.1本节,我们已经开启的后端的开发,因为是主要介绍Vben Admin的登录逻辑,所以Flask开发这里只截取了部分主要代码。

cuiwin的专栏 4190

socket通信乱码问题

用socket编写通信程序时,发现会出现乱码的情况,解决方法是InputStreamReader编码参数,windows选择UTF-8,mac选择GBK

随便玩玩 832

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Delphi中的字符串(转)

widestring转换成pchar Delphi有三种类型的字符: •AnsiChar这是标准的1字节的ANSI字符,程序员都对它比较熟悉。 •WideChar这是2字节的Unicode字符。 •Char在目前相当于AnsiChar,但在Delphi以后版本中相当于WideChar. 记住因为一个字符在长度上并不表示一个字节,所以不能在应用程序中对字符长度...

518

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

UniCode问题的探讨,终于解决了编码的问题。--Delphi

在Delphi里用了TSiLang控件来做多语言版,但是总是在繁体的系统下,转成英文后再转成繁体就会出现乱码,也搞不清楚是什么问题,在简体的系统下就不会。 现在对UniCode的程序还是不太了解。大家没有资料可以交流一下。 Unicode的支持Borland公司没有提供相关的控件,真是感觉Borland在“偷懒”还好Tory完成了这部分的工作(TntUnicode)。虽然Borland提供了一些3...

weixin_34018202的博客 386

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

DELPHI高性能大容量SOCKET并发(六):协议字符集

UTF-8 UTF-8是UNICODE的一种变长字符编码又称万国码,由Ken Thompson于1992年创建。现在已经标准化为RFC 3629。UTF-8用1到6个字节编码UNICODE字符。用在网页上可以同一页面显示中文简体繁体及其它语言(如日文,韩文)。 使用UTF-8的好处是现在一些手机平台都是使用UTF-8,另外在一些嵌入式平台,如果不支持中文,只支持英文,可以不转换,UTF-8就可

SQLDebug_Fan的专栏 6017

D2007下使用TEncoding类进行UNICODE、UTF8、UTF32格式转换?

源码下载地址:http://www.rayfile.com/files/1f6d6517-eed9-11dd-8bce-0019d11a795f/ 说明:参照Delphi2009的相关类,写了TEncoding类及继承类。重写了UTF16、UTF8、UTF32在Delphi2007下的字符处理方式,现在能进行这些格式的读写了。当然对于Delphi2007,读取UNICODE格式文字显示的时

4964

使用socket 通信 解决传输乱码的问题。

String localChartSet = System.getProperty("file.encoding"); System.out.println("localChartSet>>>>"+localChartSet); // 读取客户端数据 ...

xiaoFsu的博客 1万+

sizeof(char*)几个字节?

今天看了一本书,书上有这么个结构体, typedef struct address  { char* name;                  4 int* id;   //我后加的         4 long int number;            4 char* street;                 4 char* town;              

wuxinliulei的专栏 8213
上一篇: Blob has been modified 错误的解决方案
下一篇: 【命名空间的一个疑问】pDlg = ::AfxGetMainWnd(); 像这样限定符"::" 前面没有命名空间名的情况,是什么意思?我记得好像是全局的意思,不确定。
turtle_2
博客等级 码龄17年 8粉丝 6原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值