【Delphi】解决XE3及以上版本中的ClientDataSet的长中文字段名出现乱码的问题【此问题从Delphi 10.3.3开始已解决】

       这个问题起码从Delphi XE3开始就存在,一直到目前最新版本都是这样,而且预计还会长期存在下去。导致这个问题的原因是这个组件和DataSetProvider组件的一些变量从AnsiString改成了utf8String, 但又没有改得很完整。对于英文来说,AnsiString和utf8String是一样的,因此对英文没有影响,但对于其他语言来说,AnsiString和utf8String完全不一样,连字节数都不一样,因此对于其他语言会出现问题。

要解决这个问题的方法,需要修改Datasnap.DBClient.pas和Datasnap.Provider.pas这两个单元:

1. 修改Datasnap.DBClient.pas:
   把procedure TCustomClientDataSet.AddFieldDesc过程中的
   if LName.Length = SizeOf(MIDASNAME) - 1 then //这一行改为下面的一行:
   if StrLen(FieldDesc.szName) = SizeOf(MIDASNAME) - 1 then
2. 修改Datasnap.Provider.pas:
   把procedure TCustomPacketWriter.AddAttribute过程中的
   LValuePtr := M.AsAnsi(string(Value)).ToPointer;  //这一行改为下面的一行:
   LValuePtr := M.AsUTF8(string(Value)).ToPointer;
 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值