[转载]Android 4.0 WebView 使用loadData加载网页乱码之解决办法_寒灵_新浪博客

[转载]Android 4.0 WebView 使用loadData加载网页乱码之解决办法_寒灵_新浪博客.

Android 4.0以上的版本,Webview若使用loadData会出现中文乱码

 

 

 

解决办法:

 

 

 

使用loadDataWithBaseURL方法

 

 

 

原因:

 

 

 

请看loadData和loadDataWithBaseURL区别

 

 

 

首先,从方法的定义来看:

 

 

 

public void  loadData(String data, String mimeType, String encoding) 

 

public void  loadDataWithBaseURL(String baseUrl, String data, String mimeType, String encoding, String historyUrl)

 

 

 

loadDataWithBaseURL()比loadData()多两个参数,可以指定HTML代码片段中相关资源的相对根路径,也可以指定历史Url,两个方法的其余三个参数相同。

 

 

 

其次,两个方法加载的HTML代码片段有些不同

 

 

 

loadData()中的html 代码中不能包含’#’, ‘%’, ‘\’, ‘?’四中特殊字符,这就为我们内嵌css样式等制造了麻烦,因为css中经常用’#’, ‘%’等字符,需要如何处理呢?我们需要用UrlEncoder编码为#, %, ‘, ? ,所以loadData需要对这些特殊字符进行转换,而loadDataWithBaseURL不需要转换。

 

 

 

loadData() 中特殊字符的转换方法:

 

 

 

StringBuilder buf = new StringBuilder(html.length());

 

   for (char c : html.toCharArray()) {

 

       switch (c) {

 

         case ‘#’:  buf.append(“#”); break;

 

         case ‘%’:  buf.append(“%”); break;

 

         case ‘\”: buf.append(“‘”); break;

 

         case ‘?’:  buf.append(“?”); break;               

 

         default:

 

           buf.append(c);

 

           break;

 

       }

 

   }

 

 

 

loadDataWithBaseURL 使用方法:

 

 

 

StringBuilder data = new StringBuilder(“<html><body bgcolor=\”#F2F6F8\”>”);  

 

            int size = paperList.size();  

 

            for(int i = 0;i < size;i++){  

 

                if(!StringUtils.isEmpty(paperList.get(i).getFilePath())){  

 

                    data.append(“<center>”).append(“<img src = \”file://”+paperList.get(i).getFilePath()+”\”>”).append(“</center><br>”);  

 

                }  

 

                data.append(“<center>”).append(“<font color=\”#000000\”>”+paperList.get(i).getContent()+”</font>”).append(“</center><br><br>”);  

 

            }  

 

            data.append(“</body></html>”);  

webView.loadDataWithBaseURL(“”, data, “text/html”, “UTF-8″,””);

赞(0) 打赏
分享到: 更多 (0)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏