野兽

android webview loaddata乱码问题

  webView直接调用webView.loadData(data, mimeType, encoding);方法,如果data中有中文会显示乱码。

  String data = "测试中文yingwing";
  String encoding = "utf-8";
  String mimeType = "text/html";

  解决方法:

  1、设置webview默认编码

    webView.getSettings().setDefaultTextEncodingName(encoding);

  2、改用:loadDataWithBaseURL()方法,具体参数如下

  webView.loadDataWithBaseURL(null,data, mimeType,  encoding,null);

  原因(别人博客copy url:http://blog.sina.com.cn/s/blog_4b93170a0102e0e9.html

    请看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",""); 
posted @ 2013-10-16 10:18  android-susu  阅读(1266)  评论(0编辑  收藏  举报