2015-11-04 25 views
1
uses 
    ... 
    XSuperObject; 

procedure TForm1.Button1Click(Sender: TObject); 
var 
    Json: ISuperObject; 
begin 
    Memo1.Lines.Add('{"Evênements":"Noël"}'); 
    Json := SO('{"Evênements":"Noël"}'); 
    Memo1.Lines.Add(Json.AsJSON(True)); 
end; 

這段代碼產生在Memo1以下的輸出:德爾福XE7:我如何使XSuperObject輸出重音字符?

{"Evênements":"Noël"} 
{ 
    "Ev\u00eanements":"No\u00ebl" 
} 

爲什麼我得到\ u00ea和\ u00eb輸出,我應該怎樣做才能得到正確的重音符號?

回答

0

根據我對代碼的閱讀,圖書館沒有辦法做你想要的。使用StrToUTF16XSuperJSON.pas中生成字符串,並且該函數被編碼以將所有非ASCII字符轉換爲在您的問題中觀察到的反斜槓轉義格式。

這個函數在技術上產生UTF-16,但僅僅是因爲每個字符擴展爲16位的ASCII是UTF-16的一個子集。我想你應該file an issue with the project來請求更典型的JSON序列化。

您可以完全省略ChrToUTF16函數,對於幾乎所有的輸入都可以。

就JSON而言,你得到的輸出是好的。這是完全有效的JSON,並且字符串將被讀回以產生與之前相同的值。如果您不希望人工手動讀取或編輯此JSON,那麼您不應該擔心。

+0

太棒了!在XSuperJSON.pas裏面我剛剛註釋掉了這一行: '#127 ..#65535:Result:= Result + ChrtoUTF16(Ord(Tmp ^));' 現在它的工作方式就像我想要的那樣。 非常感謝! – Rob