2017-04-15 3 views
-2

私はJSONをUTF-8文字列よりも解析したいと思いますが、この値をdelphi XE3のラベルに表示するだけですか?しかし、ShowMessage()で表示するとき。 'سعید'JSON with UTF-8の値をdelphi xe3でTlkJSONobjectで

私のコード:

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

を確かTlkJSONはすでにUnicodeを理解し、正しくデコードされた文字列を返します。 –

+0

しかし、正しくないユニコードを返します –

+0

コードにエラーがあり、意味をなさない。コンパイル可能な[最小限で完全で検証可能な例](http://stackoverflow.com/help/mcve)を提供してください。 –

答えて

2

lkJSONユニットのソースによると、UTF8から不要なデコードがある:

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

この値は、私に 値を助けてください正しいですかJSON文字列がUTF8でエンコードされていない場合は、この行を探してコメントし、ws値をjs.FValueに割り当てます:

... 

    js := TlkJSONstring.Create; 

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

    js.FValue := ws; 

    ... 

とAnsiToUtf8またはそのような方法を使用する必要はありません、ただgetString使用:

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