有些人能帮我正确显示UTF-8 unicode字符串吗?
我正在调用一个从Web服务接收文本字符串的过程。该过程工作正常,字符串被完美地接收。但是,由于字符串包含UTF-8文本,因此它将unicode字母显示为数字...
{"displayName":"\u062a\u0637\u0628\u064a\u0640\u0640\u0640\u0642 \u062f\u0639\u0640\u0640\u0640\u0640\u0640\u0627\u0621"
德尔福柏林应该支持UTF-8,但我没有使用哪种函数来编码UTF-8并显示文本(阿拉伯语文本)!!
Procedure TF_Main.GnipHTTPSTransfer(Sender: TObject; Direction: Integer; BytesTransferred: Int64; PercentDone: Integer; Text: String);
Begin
Inc(Transfer_Count);
L_Counter.Caption:=IntToStr(Transfer_Count);
write(GNIP_Text_File, Text);
M_Memo.Lines.Add(text);
End;
答案 0 :(得分:6)
字符串不是UTF-8。即使它是使用UTF-8通过HTTP传输的,它在Text
字符串中不再是UTF-8,而是UTF-16。它的内容是一个JSON编码的对象,它有一个displayName
字段,包含使用转义序列表示法编码的Unicode字符(在JSON中不是严格要求的,但仍受支持)。每个\uXXXX
都是UTF-16代码单元值的转义文本表示形式(\u062a
是Unicode代码点U+062A ARABIC LETTER TEH
,\u0637
是U+0637 ARABIC LETTER TAH
等。
Delphi有JSON framework,它将为您解码转义序列。例如:
uses
..., System.JSON;
procedure TF_Main.GnipHTTPSTransfer(Sender: TObject; Direction: Integer; BytesTransferred: Int64; PercentDone: Integer; Text: String);
var
JsonVal: TJSONValue;
JsonObj: TJSONObject;
begin
Inc(Transfer_Count);
L_Counter.Caption := IntToStr(Transfer_Count);
write(GNIP_Text_File, Text);
M_Memo.Lines.Add(Text);
JsonVal := TJSONObject.ParseJSONValue(Text);
if JsonVal <> nil then
try
JsonObj := JsonVal as TJSONObject;
M_Memo.Lines.Add(JsonObj.Values['displayName'].Value); // تطبيـــق دعـــــاء
finally
JsonVal.Free;
end;
end;