在WebView中显示iso-8859-1编码的内容

时间:2011-05-12 08:32:52

标签: android

我从SQlite数据库中获取HTML编码内容,我想在WebView中显示。我目前正在使用:

public class ShowAbstracts extends Activity {
 public void onCreate(Bundle savedInstanceState) 
 {
    super.onCreate(savedInstanceState);
    Bundle extras = getIntent().getExtras();
    if (extras != null) {
         String body = extras.getString(DatabaseHelper.KEY_BODY);
         WebView webview = new WebView(this);
         setContentView(webview);
         String summary = "<html><body> "+body+" </body></html>";
         webview.loadData(summary, "text/html", "iso-8859-1");
    }   
 }
}

它的工作原理是它打开一个WebView并显示内容但我得到了奇怪的字符,对于某些内容它只是崩溃了。数据库采用ISO-8859-1编码。 有没有办法处理我的数据库内容中的特殊字符并正确显示它们?

非常感谢!

Rik

2 个答案:

答案 0 :(得分:5)

成功!

解决这个问题是三件事的组合:

  1. uri编码字符串
  2. 在标识utf-8编码的HTML字符串中粘贴头部
  3. 安装LibreOffice,允许将用于生成SQLite数据库的xls文件保存为带有utf-8编码的csv文件(据我所知,MS Office Excel无法实现)。
  4.  public class ShowAbstracts extends Activity {
        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) 
        {
            super.onCreate(savedInstanceState);
            Bundle extras = getIntent().getExtras();
            if (extras != null) {
               String body = extras.getString(DatabaseHelper.KEY_BODY);
               WebView webview = new WebView(this);
               setContentView(webview);
               String summary = "<?xml version='1.0' encoding='utf-8'?><html><body>"+body+" </body></html>";
               String uri = Uri.encode(summary);
               webview.loadData(uri, "text/html", "utf-8");
            }   
        }
    }
    

答案 1 :(得分:0)

WebView的api(http://developer.android.com/reference/android/webkit/WebView.html)说数据参数必须是URI转义的(http://developer.android.com/参考/ JAVA /净/ URLEncoder.html)。

此外,当您有一个字符串时,编码已经完成。你必须看到字符串是使用正确的编码创建的(对于Android,默认值是UTF-8)。