2017-04-15 2 views
-2

Ich möchte JSON als UTF-8 String zu parsen, aber wenn ich diesen Wert in Delphi XE3 in einem Label zeigen nur anzeigen ???? aber wenn ShowMessage(); dieser Wert korrekt ist Wert bitte helfen Sie mir: 'سعید'parsen JSON mit UTF-8 Wert in Delphi Xe3 mit TlkJSONobject

mein Code:

procedure TServerMethods1.Ins_Info(var TehResult: String); 
var  
    name: string; 
    js,xs:TlkJSONobject; 
begin 
    js := TlkJSON.ParseText(ThResult) as TlkJSONobject; 
    if not assigned(js) then 
    begin 
     readln; 
     exit; 
    end 
    else 
    begin 
     name := AnsiToUtf8(js.getString('name')); 
    end; 
end; 
+0

Sicher TlkJSON bereits versteht Unicode und gibt Zeichenfolgen, die richtig decodiert worden sind. –

+0

, aber falsche Unicode zurückgeben –

+0

Ihr Code hat Fehler und macht keinen Sinn. Bitte geben Sie ein kompilierbares [minimales, vollständiges und überprüfbares Beispiel] (http://stackoverflow.com/help/mcve) an. –

Antwort

2

Laut der Quelle von lkJSON Einheit gibt es eine unnötige Decode von UTF8:

{$ifdef USE_D2009} 
    js.FValue := UTF8ToString(ws); 
{$else} 
    js.FValue := UTF8Decode(ws); 
{$endif} 

Wenn Ihre JSON-Zeichenfolgen nicht in UTF8 codiert sind, suchen und kommentieren Sie diese Zeilen und weisen Sie dem js.FValue einfach einen ws-Wert zu:

... 

    js := TlkJSONstring.Create; 

//{$ifdef USE_D2009} 
// js.FValue := UTF8ToString(ws); 
//{$else} 
// js.FValue := UTF8Decode(ws); 
//{$endif} 

    js.FValue := ws; 

    ... 

und es besteht keine Notwendigkeit AnsiToUtf8 oder solche Methoden zu verwenden, benutzen Sie einfach getString:

name := js.getString('name');