这个问题起码从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;
修复Delphi Datasnap国际化问题
本文介绍了一个从DelphiXE3起存在的问题及其解决方案,该问题是由于组件中的某些变量从AnsiString更改为UTF8String导致的,影响了除英语外的语言支持。文章提供了对Datasnap.DBClient.pas和Datasnap.Provider.pas两个文件的具体修改步骤。
1003

被折叠的 条评论
为什么被折叠?



