我嘗試通過 RadServer IIS Package 和 Delphi Client 與 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。這讓我加載了記憶體表,但導致丟失了像 ??ü 這樣的字母
- 在服務器端更改 UTF8toUnicode,在客戶端更改 backwords。這導致 Memtable 的 JSON 不可讀
- 將 JSON 加載到 JSONString 并在加載到 Memtable 之前對其進行本地格式化。這會導致 JSON 不可讀,因為陣列和物件字符也被參考了。
uj5u.com熱心網友回復:
JSON 最常使用 UTF-8 進行交換,但默認情況下在 WindowsTStringStream 上不使用 UTF-8,僅在 Posix 系統上使用。嘗試使用TStringStream.Create(..., TEncoding.UTF8)強制 UTF-8。
這假設FDQuery.SaveToStream()使用 UTF-8 保存,并aMemtable.LoadFromStream()使用 UTF-8 加載,否則您仍然會遇到編碼不匹配的情況。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/324343.html
標籤:json 德尔福 火柴 delphi-10.4-悉尼 内存表
