簡體   English   中英

RAD Server Delphi - 由於 Json 轉換后元音發生變異,使用 savetostream 和 loadfromstream 不起作用

[英]RAD Server Delphi - using savetostream und loadfromstream does not work because of mutated vowels after Json conversion

我嘗試通過 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 不可讀,因為數組和對象字符也被引用了。

JSON 最常使用 UTF-8 進行交換,但默認情況下TStringStream在 Windows上不使用 UTF-8,僅在 Posix 系統上使用。 嘗試使用TStringStream.Create(..., TEncoding.UTF8)強制使用 UTF-8。

這假設FDQuery.SaveToStream()使用 UTF-8 保存,而aMemtable.LoadFromStream()使用 UTF-8 加載,否則您仍然會遇到編碼不匹配的情況。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM