UTF-8字符在WindowsPhone的WebBrowser控件中显示(解决乱码)

International UTF-8 Characters in Windows Phone 7 WebBrowser Control

我已经好久没有更新博客了,好像最近没有什么好要分享给大家的。因为我觉得我需要一些时间去整理我学习到的有关于Windows Phone 7 For Silverligtht 开发的知识。但是,有一个知识点我迫不及待的想要分享给大家,那就是国际化字符在WebBrowser控件中的使用。


通常来说,我们会遇到这样的问题:我们想显示带有国际字符的HTML文件。在Windows Phone 7中最直接的方法就是使用一个WebBrowser控件,调用它的"NavigateToString(string myString)" 方法显示HTML


但是,当我们使用上述方法去显示带国际化字符的HTML(如日语,阿拉伯语,韩语,俄语或者中文字符)时,我们会得到下面的让人很迷惑的字符:

string testString = "<html><body>日本列島の占領の最初の兆候が縄文時代で約14,000のBC、竪穴住居の中石器時代新石器時代に半定住狩猟採集文化と農業の初歩的なフォームから続いて、30,000年頃旧石器文化と登場しました。</body></html>";
BrowserControl.NavigateToString(testString);


运行结果如下:



可能你对日语不是很熟悉,但是这个真的不是日语。这个只是我们想要看到的日语字符的ASCII码。为什么会出现这样的状况?我也不是很清楚原因。在正确显示这些字符的努力中我做了一次又一次的带着血泪的尝试。


直到我发现了这篇从名字上看来对于我们要解决的问题没有什么帮助的文章“Windows Phone 7 Character Testing...”(PS:原文地址已经打不开)。在那篇文章中,作者给我们提供了一个非常有用的方法,使用该方法我们就能转换我们要呈现的国际化字符:

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;
}


通过使用这个方法,我们仅简单修改一下我们的代码就能显示我们上面没有正常显示的字符。

BrowserControl.NavigateToString(ConvertExtendedASCII(testString));

运行结果为:


终于出结果了,我很高兴,真的很高兴。

修改了的字符转化代码:

private static string ConvertExtendedAscii(string html)
{
    StringBuilder sb = new StringBuilder();
    foreach (var c in html)
    {
      int charInt = Convert.ToInt32(c);
      if (charInt > 127)
         sb.AppendFormat(“&#{0};”, charInt);
      else
         sb.Append(c);
    }
    return sb.ToString();
}


坚持到最后的人才能看到好东西。可以是用如下的代码解决乱码问题.

StreamReader reader = new StreamReader(TitleContainer.OpenStream(“731999031.htm”), Encoding.GetEncoding(“unicode”));


原文地址: International UTF-8 Characters in Windows Phone 7 WebBrowser Control
### WPF 应用程序中 Content 显示中文乱码解决方案 在开发 WPF 应用程序时,如果遇到 `Content` 控件显示中文字符出现乱码的情况,通常是因为编码不一致或未正确处理 Unicode 字符所致。以下是几种常见的解决方法: #### 方法一:确保 XAML 文件的编码格式正确 XAML 文件应保存为 UTF-8 编码,并且在文件头部声明正确的 XML 声明。 ```xml <?xml version="1.0" encoding="utf-8"?> <Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" Title="MainWindow"> <!-- Window content here --> </Window> ``` 此操作可防止因源文件本身的编码问题引起乱码现象[^1]。 #### 方法二:设置字符串资源的编码方式 当通过代码动态加载字符串到控件时,需确认所使用的编码方式与目标一致。例如,在使用 HttpClient 获取远程数据并展示于 UI 上之前,应该先解析响应流中的文本内容,并显式指定期望的字符集。 ```csharp using System.Net.Http; using System.Text; // ... var httpClient = new HttpClient(); HttpResponseMessage response = await httpClient.GetAsync(url); response.EnsureSuccessStatusCode(); string responseBody = await response.Content.ReadAsStringAsync(Encoding.UTF8); myLabel.Content = responseBody; ``` 上述 C# 代码片段展示了如何利用 `Encoding.UTF8` 参数来读取 HTTP 请求返回的数据,从而避免潜在的编码冲突[^4]。 #### 方法三:调整 WebBrowser 组件的行为 对于嵌入式的 WebBrowser 控制(如 wpf 的 WebView 或者旧版的 WebBrowser),有时会面临直接渲染 HTML 文本串而产生的乱码难题。此时可以通过转换非 ASCII 范围内的字符为对应的 HTML 实体表示法来规避该问题。 ```csharp public static class HtmlHelper { public static string ConvertToHtmlEntities(this string input) { var sb = new StringBuilder(); foreach (char c in input) { if ((int)c > 127 || c == '<' || c == '>' || c == '&' || c == '\"') { sb.AppendFormat("&#{0};", (int)c); } else { sb.Append(c); } } return sb.ToString(); } } // 使用示例 webView.NavigateToString(htmlString.ConvertToHtmlEntities()); ``` 这段扩展函数能够有效地将特殊字符以及超出基本拉丁字母范围外的所有符号转化为安全的形式,适用于 Windows Phone 和其他平台上的 Web 浏览器组件[^2]。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值