有没有人知道如何使用WebBrowser.NavigateToString()方法加载UTF8编码的字符串?现在我最终得到了一堆错误显示的字符。
这是无法正确显示的简单字符串:
webBrowser.NavigateToString("ąęłóńżźćś");
代码文件以UTF-8编码保存(带签名)。
感谢。
答案 0 :(得分:4)
建议使用ConvertExtendedASCII
,但效果很慢。使用StringBuilder
代替(在我的情况下)约 800 倍:
public string FixHtml(string HTML)
{
StringBuilder sb = new StringBuilder();
char[] s = HTML.ToCharArray();
foreach (char c in s)
{
if (Convert.ToInt32(c) > 127)
sb.Append("&#" + Convert.ToInt32(c) + ";");
else
sb.Append(c);
}
return sb.ToString();
}
答案 1 :(得分:3)
首先,NavigateToString()
期待一个完整的HTML文档。
其次,当您传递HTML时,最好传递HTML实体,而不是依赖于编码。遗憾的是,浏览器实际上并不支持很多实体代码,因此您应该在必要时查看使用数字unicode值 很像这样:
webBrowser1.NavigateToString("<html><body><p>ó Õ</p></body></html>");
答案 2 :(得分:1)
试试this article。它应该有所帮助。简而言之,它建议使用以下代码片段将您的字符串转换为适当的格式:
private static string ConvertExtendedASCII(string HTML)
{
string retVal = "";
char[] s = HTML.ToCharArray();
foreach (char c in s)
{
if (Convert.ToInt32(c) > 127)
retVal += "&#" + Convert.ToInt32(c) + ";";
else
retVal += c;
}
return retVal;
}
答案 3 :(得分:0)
如果您在字节数组中的内存中有 UTF8 ,那么您可以使用NavigateToStream
而不是使用MemoryStream
来尝试NavigateToString
。如果可以,您应该尝试确保它们是 UTF8 缓冲区中的 BOM 。
请注意,问题中的字符串不是 UTF8 字符串。它是一个 UTF16 字符串,里面有一些垃圾。通过在字节之间放置零并将其存储在System.String
中,您已将其损坏。