RAD 服务器 Delphi - 使用 savetostream 和 loadfromstream 不起作用,因为 Json 转换后元音发生了变异
RAD Server Delphi - using savetostream und loadfromstream does not work because of mutated vowels after Json conversion
我尝试通过 RadServer IIS 包和 Delphi 客户端与 EMSEndpoint 交换数据。
我尝试的事情对我来说看起来很简单,但我现在无法完成。
在包中有一个指向 MSSql 服务器的 TFDConnection。 TFDQuery 与该连接相连。
使用此代码,我创建了 JSON 响应(服务器端):
var lStream: TStringStream := TStringStream.create;
FDQuery.SaveToStream(lStream,sfJSON);
AResponse.Body.SetStream(lStream,'application/json' ,True);
使用该代码,我尝试将数据集加载到 TFDMemtable(客户端):
lstrstream: TStringStream := TStringStream.create(EMSBackendEndpoint.Response.Content);
aMemtable.LoadFromStream(lstrstream, sfJSON);
Memtable 说 [FireDac][Stan]-719 invalid JSON storage format
怎么可能呢?我知道问题出在哪里,我的流中有 äöü 符号,但是当我将它从一个组件加载到另一个组件时,它应该可以工作,不是吗?
有什么建议我可以尝试吗?到目前为止我尝试了什么:
- 正在通过 UTF8toUnicode 在客户端中加载 JSON。这让我加载了 Memtable,但导致缺少像 öäü
这样的字母
- 在服务器端将 UTF8 更改为 Unicode,在客户端更改为 backwords。这导致 Memtable
不可读 JSON
- 正在将 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 加载,否则您仍然会遇到编码不匹配的情况。
我尝试通过 RadServer IIS 包和 Delphi 客户端与 EMSEndpoint 交换数据。 我尝试的事情对我来说看起来很简单,但我现在无法完成。
在包中有一个指向 MSSql 服务器的 TFDConnection。 TFDQuery 与该连接相连。 使用此代码,我创建了 JSON 响应(服务器端):
var lStream: TStringStream := TStringStream.create;
FDQuery.SaveToStream(lStream,sfJSON);
AResponse.Body.SetStream(lStream,'application/json' ,True);
使用该代码,我尝试将数据集加载到 TFDMemtable(客户端):
lstrstream: TStringStream := TStringStream.create(EMSBackendEndpoint.Response.Content);
aMemtable.LoadFromStream(lstrstream, sfJSON);
Memtable 说 [FireDac][Stan]-719 invalid JSON storage format
怎么可能呢?我知道问题出在哪里,我的流中有 äöü 符号,但是当我将它从一个组件加载到另一个组件时,它应该可以工作,不是吗?
有什么建议我可以尝试吗?到目前为止我尝试了什么:
- 正在通过 UTF8toUnicode 在客户端中加载 JSON。这让我加载了 Memtable,但导致缺少像 öäü 这样的字母
- 在服务器端将 UTF8 更改为 Unicode,在客户端更改为 backwords。这导致 Memtable 不可读 JSON
- 正在将 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 加载,否则您仍然会遇到编码不匹配的情况。