json - RAD Server Delphi - 使用 savetostream 和 loadfromstream 不起作用,因为 Json 转换后元音发生了变异

标签 json delphi firedac delphi-10.4-sydney fdmemtable

我尝试通过 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 无效的 JSON 存储格式 怎么可能呢?我知道问题出在哪里,我的流中有 äöü 符号,但是当我将它从一个组件加载到另一个组件时,它应该可以工作,不是吗? 有什么建议我可以尝试吗?到目前为止我尝试了什么:

  • 通过 UTF8 到 Unicode 在客户端加载 JSON。这让我加载了 Memtable 但导致丢失像 öäü 这样的字母
  • 将服务器端的 UTF8 更改为 Unicode,并在客户端更改反向词。这导致 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 加载,否则你仍然会有一个编码不匹配。

关于json - RAD Server Delphi - 使用 savetostream 和 loadfromstream 不起作用,因为 Json 转换后元音发生了变异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69614336/

相关文章:

json - 快速向 JSON 的正文添加一个值

java - 具有异步任务的 fragment 中的 ListView

delphi - 如何在 Delphi 中动态调用命名过程或函数

sql-server - 更新后检索列的值?

Delphi:DBexpress 比 Firedac 快吗

java - JSON 错误 "java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 1 path $"

c# - JSON.NET:处理反序列化的未知成员

android - 如何删除 ListView 搜索框中的清除按钮?

delphi - 如何从外部控制台应用程序读取?

mysql - [FireDac][物理][MySQL]-1101。不支持的 MySQL 版本 [0]。支持从 v 3.20 到 v6.2 的客户端和服务器