当我在此字符串上使用UTF8ToAnsi时,结果为空。知道为什么会这样吗?
msgstr" 2。 Broughton,PMG。 ^ iJournal of Automatic Chemistry。^ 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;
产生
&#34;&LT;&LT;&GT;&GT;&#34;
答案 0 :(得分:2)
您的代码失败,因为您传递的内容不是UTF-8编码的。你通过这个函数实际上是ANSI编码的。当Utf8Decode
收到该文本时,它会尝试对其进行解码,当遇到格式错误的字节时,不是UTF-8的字节,它会退出并返回空字符串。
问题角色是 1984年4月 - 6月中的短划线,这是一个n-dash。在ANSI中,编码为#150
。当您尝试将其解释为UTF-8时,#150
不是字符的单字节编码,并且作为多字节序列的第一个字节也无效。因此失败了。
要解决您的实际问题,您需要找出在您期望UTF-8的地方有非UTF-8数据的原因。
答案 1 :(得分:1)
Utf8ToAnsi
返回空字符串。您可以调试程序以发现字符串真正包含的内容。您显然在获取输入字符串方面存在问题。也许你会误解UTF-8,或者你可能从未真正拥有过UTF-8。
答案 2 :(得分:1)
您在4月至6月期间使用的破折号无效UTF8。所以无法正确解码。这不是立即可见的,但您在此处使用的符号不是正常减号,而是不同的字符。