读取 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 中检查了很多问题并尝试了上面提到的解决方案,但没有任何反应。
提前致谢,我卡住了。
您可以使用 UTF8ToWideString
将 UTF8
字符串转换为 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 解决方案读取数据。
我有一个使用 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 中检查了很多问题并尝试了上面提到的解决方案,但没有任何反应。
提前致谢,我卡住了。
您可以使用 UTF8ToWideString
将 UTF8
字符串转换为 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 解决方案读取数据。