WP7的WebBrowser.NavigateToString()和文本编码

时间:2010-10-17 09:15:52

标签: encoding browser windows-phone-7

有没有人知道如何使用WebBrowser.NavigateToString()方法加载UTF8编码的字符串?现在我最终得到了一堆错误显示的字符。

这是无法正确显示的简单字符串:

webBrowser.NavigateToString("ąęłóńżźćś");

代码文件以UTF-8编码保存(带签名)。

感谢。

4 个答案:

答案 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>&oacute; &#213;</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中,您已将其损坏。