微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决读取 Delphi 字符串中的 HTML 特殊字符

我有一个用 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 新闻

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

记事本中的文件显示为UTF8

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

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

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

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

提前致谢,我被卡住了。

解决方法

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

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

否则使用 ANSI 编码。

,

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

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

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

但是当我添加:

<head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></head>

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。