RAD服务器Delphi -使用savetostream和loadfromstream不工作,因为Json转换后元音突变



我尝试通过RadServer IIS包和Delphi客户端与EMSEndpoint交换数据。我所做的对我来说很简单,但是我现在做不出来。

在包中有一个指向MSSql服务器的TFDConnection。TFDQuery与该Connection连接。使用以下代码,我创建了JSON响应(服务器端):

var lStream: TStringStream := TStringStream.create;
FDQuery.SaveToStream(lStream,sfJSON);
AResponse.Body.SetStream(lStream,'application/json' ,True);

使用该代码,我尝试将数据集加载到TFDMemtable (Clientside):

lstrstream: TStringStream := TStringStream.create(EMSBackendEndpoint.Response.Content);
aMemtable.LoadFromStream(lstrstream, sfJSON);

Memtable表示[FireDac][Stan]-719 invalid JSON storage format这怎么可能呢?我知道问题在哪里,在我的流中有äöü符号,但是当我从一个组件加载到另一个组件时,它应该工作,不是吗?有什么建议我可以试试吗?到目前为止我所尝试的:

  • 通过UTF8toUnicode在客户端加载JSON。这让我加载Memtable,但结果丢失的字母如öäü
  • 在服务器端更改UTF8toUnicode,在客户端更改backwords。这导致不可读JSON的Memtable
  • 将JSON加载到JSONString中,并在加载到Memtable之前进行本地格式化。这会导致不可读的JSON,因为数组和对象字符也被引用出来。

JSON通常使用UTF-8交换,但默认情况下TStringStream在Windows上不使用UTF-8,仅在Posix系统上使用。尝试使用TStringStream.Create(..., TEncoding.UTF8)强制UTF-8。

这假设FDQuery.SaveToStream()使用UTF-8保存,aMemtable.LoadFromStream()使用UTF-8加载,否则您仍然会遇到编码不匹配。

相关内容

最新更新