读取 Delphi 个字符串中的 HTML 个特殊字符

Read HTML special characters in Delphi string

我有一个使用 Expression Web 4 构建的网页“index.html”,其中包含一个由 id 分隔的值:

<html>
<head></head>
<body>
<... some html code ...>
<!--MYVALUEID-->
Dernières News
<... some html code ...>
</body>
</html>

在我的 delphi 应用程序中,我将页面加载到 TStringList 中并将值读取到 TEDIT 中:

S:=TStringList.Create;
S.LoadFromFile('path\index.html');
Edit1.Text:=S[S.IndexOf('<!--MYVALUEID-->')+1];
S.Free;

问题出在重音字符上,因为我在 TEDIT 中看到了这个:“Dernières News”

在 Expression Web 代码中,文本是正确的:Dernières News

当我在记事本中打开 index.html 时,它显示:Dernières News

文件在记事本中显示为UTF8

使用 HTTPApp.HTMLDecode() 时,我得到了:Dernières News

还有 System.NetEncoding,TNetEncoding.HTML.Decode 还有:Dernières News

是否有可靠的例程来解码html特殊字符转换?

我在 SO 中检查了很多问题并尝试了上面提到的解决方案,但没有任何反应。

提前致谢,我卡住了。

您可以使用 UTF8ToWideStringUTF8 字符串转换为 unicode 字符串:

S := TStringList.Create;
try
    S.LoadFromFile('path\index.html');
    Edit1.Text := UTF8ToWideString(S[S.IndexOf('<!--MYVALUEID-->') + 1]);
finally
    S.Free;
end;

由于您的 HTML 文件是用 UTF-8 编码的,您应该在调用 LoadFromFile() 时指定它:

S := TStringList.Create;
S.LoadFromFile('path\index.html', TEncoding.UTF8);

否则使用 ANSI 编码。

我想我遇到了问题,但解决方案导致了另一个问题,我试图读取的文件是“header.html”(我输入 index.html 只是为了示例),并且 header.html 将 PHP 包含在索引文件中,因此不包含任何头部或主体信息,以避免包含时 HTML 混乱,因此因此它不是由 Expression WEB 编码的 UTF8 , .... 当我在文件中添加一个“UTF8 元内容”让编辑器对其进行编码时,现在它可以工作了。

但是当我添加 :

时我现在的问题
<head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></head>

编辑器显示了一个对话框,用于从 header.html 中删除 BOM 请求,以避免在浏览器上显示空白 space(这是真的)所以如果我删除它,文档会丢失他的UTF8 如果我将其保留为空白 space 将显示在浏览器上,

我知道这应该是另一个问题,所以我将删除 BOM 并使用 fpiette 解决方案读取数据。