Delphi UTF8ToAnsi故障

Delphi UTF8ToAnsi故障,delphi,delphi-2007,Delphi,Delphi 2007,当我在这个字符串上使用UTF8ToAnsi时,结果是空的。知道为什么吗 msgid“2.Broughton,PMG.^I自动化学学报。^n^lVol 6.No 2.(1984年4月至6月)第94-95页。” 这说明了问题: procedure TForm1.FormShow(Sender: TObject); begin Memo1.Lines.Text := '<<' + UTF8ToANSI('msgid "2. Broughton, PMG. ^iJournal of

当我在这个字符串上使用UTF8ToAnsi时,结果是空的。知道为什么吗

msgid“2.Broughton,PMG.^I自动化学学报。^n^lVol 6.No 2.(1984年4月至6月)第94-95页。”

这说明了问题:

procedure TForm1.FormShow(Sender: TObject);
begin
Memo1.Lines.Text :=
  '<<' +
  UTF8ToANSI('msgid "2. Broughton, PMG. ^iJournal of Automatic Chemistry.^n^lVol 6. No 2. (April – June 1984) pp 94-95."') +
  '>>';
end;
程序TForm1.FormShow(发送方:TObject);
开始
备忘录1.Lines.Text:=
'';
结束;
产生


Utf8ToAnsi
如果输入不是有效的UTF-8(例如具有不完整的多字节字符或格式错误的尾随字节),则返回空字符串。”。您可以调试程序以发现字符串真正包含的内容。显然,在获取输入字符串的方式上存在问题。可能您误解了UTF-8,或者可能您从一开始就没有真正使用过UTF-8。

Utf8ToAnsi
如果输入不是有效的UTF-8(例如具有不完整的多字节字符或格式错误的尾随字节),则返回空字符串。您可以调试程序以发现字符串真正包含的内容。显然,在获取输入字符串的方式上存在问题。也许你误解了UTF-8,或者也许你从一开始就没有真正使用过UTF-8。

你在4月到6月之间使用的破折号不是有效的UTF8。因此无法正确解码。这不是立即可见的,但您在此处使用的符号不是正常的减号,而是另一个字符。

您在4月到6月之间使用的破折号无效。因此无法正确解码。这不是立即可见的,但是您在这里使用的符号不是正常的减号,而是不同的字符。

您的代码失败,因为您传递的不是UTF-8编码。传递此函数的内容实际上是ANSI编码的。当
Utf8Decode
接收到该文本时,它会尝试对其进行解码,当遇到格式错误的字节(不是UTF-8的字节)时,它会跳出并返回空字符串

问题人物是1984年4月至6月的短跑,这是一个n短跑。在ANSI中,编码为
#150
。当您试图将其解释为UTF-8时,
#150
不是字符的单字节编码,并且作为多字节序列的第一个字节也是无效的。因此失败了


要解决实际问题,您需要弄清楚为什么在期望UTF-8的位置有非UTF-8的数据。

您的代码失败,因为您传递的数据不是UTF-8编码的。传递此函数的内容实际上是ANSI编码的。当
Utf8Decode
接收到该文本时,它会尝试对其进行解码,当遇到格式错误的字节(不是UTF-8的字节)时,它会跳出并返回空字符串

问题人物是1984年4月至6月的短跑,这是一个n短跑。在ANSI中,编码为
#150
。当您试图将其解释为UTF-8时,
#150
不是字符的单字节编码,并且作为多字节序列的第一个字节也是无效的。因此失败了


要解决实际问题,您需要弄清楚为什么您的数据不是UTF-8,而是位于您期望的UTF-8位置。

就是这样。Excel正在将“常规”字符转换为其他字符。谢谢你这么敏锐的目光!就这样。Excel正在将“常规”字符转换为其他字符。谢谢你这么敏锐的目光!