Delphi UTF-8字符串显示为反斜杠,后跟数字\0646“;在柏林?

Delphi UTF-8字符串显示为反斜杠,后跟数字\0646“;在柏林?,delphi,unicode,delphi-10.1-berlin,Delphi,Unicode,Delphi 10.1 Berlin,一些人可以帮助我正确显示UTF-8 unicode字符串吗 我正在调用一个从web服务接收文本字符串的过程。当字符串被完美接收时,该过程工作正常。但是,由于字符串包含UTF-8文本,因此它将unicode字母显示为数字 {“displayName”:“\u062a\u0637\u0628\u064a\u0640\u0640\u0640\u0642\u062f\u0639\u0640\u0640\u0640\u0640\u0627\u0621” Delphi Berlin应该支持UTF-8,但我

一些人可以帮助我正确显示UTF-8 unicode字符串吗

我正在调用一个从web服务接收文本字符串的过程。当字符串被完美接收时,该过程工作正常。但是,由于字符串包含UTF-8文本,因此它将unicode字母显示为数字

{“displayName”:“\u062a\u0637\u0628\u064a\u0640\u0640\u0640\u0642\u062f\u0639\u0640\u0640\u0640\u0640\u0627\u0621”
Delphi Berlin应该支持UTF-8,但我不知道使用哪个函数来编码UTF-8和显示文本(阿拉伯语文本)

Procedure TF_Main.gniphttptransfer(发送方:TObject;方向:Integer;bytesttransfered:Int64;完成百分比:Integer;文本:字符串);
开始
股份有限公司(转让计数);
L_计数器标题:=IntToStr(传输计数);
写入(GNIP_文本_文件,文本);
M_备忘录.行.添加(文本);
结束;

该字符串不是UTF-8。即使它是使用UTF-8通过HTTP传输的,它在
文本中也不再是UTF-8,而是UTF-16。它的内容是一个-encoded对象,它有一个
displayName
字段,其中包含使用转义序列符号编码的Unicode字符(这在JSON中不是严格要求的,但仍然受到支持)。每个
\uxxx
都是UTF-16编码单位值的转义文本表示(
\u062a
是Unicode码点
U+062A阿拉伯字母TEH
\u0637
U+0637阿拉伯字母TAH
,等等)

Delphi有一个程序,它将为您解码转义序列。例如:

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;
使用
…,System.JSON;
过程TF_Main.gniphttptransfer(发送方:TObject;方向:Integer;bytesttransfered:Int64;完成百分比:Integer;文本:字符串);
变量
JsonVal:TJSONValue;
JsonObj:TJSONObject;
开始
股份有限公司(转让计数);
L_Counter.Caption:=IntToStr(转移计数);
写入(GNIP_文本_文件,文本);
M_备忘录.行.添加(文本);
JsonVal:=TJSONObject.ParseJSONValue(文本);
如果JsonVal为零,则
尝试
JsonObj:=JsonVal作为TJSONObject;
M_Memo.Lines.Add(JsonObj.Values['displayName'].Value)//
最后
JsonVal.Free;
结束;
结束;

该字符串不是UTF-8。即使它是使用UTF-8通过HTTP传输的,它在
文本中也不再是UTF-8,而是UTF-16。它的内容是一个-encoded对象,它有一个
displayName
字段,其中包含使用转义序列符号编码的Unicode字符(这在JSON中不是严格要求的,但仍然受到支持)。每个
\uxxx
都是UTF-16编码单位值的转义文本表示(
\u062a
是Unicode码点
U+062A阿拉伯字母TEH
\u0637
U+0637阿拉伯字母TAH
,等等)

Delphi有一个程序,它将为您解码转义序列。例如:

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;
使用
…,System.JSON;
过程TF_Main.gniphttptransfer(发送方:TObject;方向:Integer;bytesttransfered:Int64;完成百分比:Integer;文本:字符串);
变量
JsonVal:TJSONValue;
JsonObj:TJSONObject;
开始
股份有限公司(转让计数);
L_Counter.Caption:=IntToStr(转移计数);
写入(GNIP_文本_文件,文本);
M_备忘录.行.添加(文本);
JsonVal:=TJSONObject.ParseJSONValue(文本);
如果JsonVal为零,则
尝试
JsonObj:=JsonVal作为TJSONObject;
M_Memo.Lines.Add(JsonObj.Values['displayName'].Value)//
最后
JsonVal.Free;
结束;
结束;

我对Delphi知之甚少,但您确定代码示例是正确的吗?因为它看起来有语法错误,所以您的示例应该是a。您的代码示例无效;无法编译。这也不是UTF-8字符串-它是编码的UTF-8字符串。Berlin无法知道您添加到备忘录中的内容是什么除了您提供的确切值之外。为什么您希望它的行为与它的行为有所不同?您告诉它将字符串
“\u062a\u0637\u0628\u064a\u0640\u0640\u0640\u0642\u062f\u0639\u0640\u0640\u0640\u0640\u0640\u0627\u0621”
放入一个备忘控件,它正是按照您的代码所说的做的。实际上,我t是一个编码的Unicode字符串,不管它来自什么特定的编码。
\uxxx
可以被解码为UTF-8以及UTF-16或UTF-32。我对Delphi知之甚少,但您确定代码示例是正确的吗?因为它看起来有语法错误,所以您的示例应该是a。您的代码示例无效;无法编译。t这也不是UTF-8字符串-它是一个编码的UTF-8字符串。Berlin无法知道您添加到备忘录中的内容是否与您提供的确切值不同。为什么您希望它的行为与实际不同?您告诉它将字符串
“\u062a\u0637\u0628\u064a\u0640\u0640\u0640\u0642\u062f\u0639\u0640\u0640\u0640\u0640\u0640\u0627\u0621'
进入一个备忘控件,它正按照您的代码所说的做。实际上,它是一个编码的Unicode字符串,不管它来自什么特定的编码。
\uxxx
可以被解码为UTF-8以及UTF-16或UTF-32。确实按照建议修改了代码,但始终得到了支持“模块GNIP_Consumer.exe中地址005F1060处的访问冲突。读取地址00000008”
ParseJSONValue()
如果解析失败,将返回一个nil指针。我已更新了示例以反映这一点。修改后的代码解决了问题,并为指定的JSON值(displayname)显示阿拉伯文本但是,我的最终目标是在一个变量/字符串中检索返回的全部“文本”,以便存储在文本文件中以供进一步处理。我不确定这是否可以在Delphi中完成???@Abdullah:当然可以。您将其放入TMemo(带有M_Memo.Lines.Add)。一旦您在该备忘录中获得所有内容,我们将