代码之家  ›  专栏  ›  技术社区  ›  Ian Vink

Android WebView UTF-8未显示

  •  41
  • Ian Vink  · 技术社区  · 14 年前

    我有一个网络视图,并试图加载简单的UTF-8文本到它。

    mWebView.loadData("將賦予他們的傳教工作標示為", "text/html", "UTF-8");
    

    2 回复  |  直到 14 年前
        1
  •  120
  •   Jorgesys    8 年前

    用途:

    mWebView.loadDataWithBaseURL(null, "將賦予他們的傳教工作標示為", "text/html", "utf-8", null);
    

    或将网站设置与 setDefaultTextEncoding :

    WebSettings settings = mWebView.getSettings();
    settings.setDefaultTextEncodingName("utf-8");
    

    WebView mWebView = (WebView) findViewById(R.id.myWebView);
    WebSettings settings = mWebView.getSettings();
    settings.setDefaultTextEncodingName("utf-8");                   
    mWebView.loadData(myCharacters, "text/html; charset=utf-8",null);
    

      mWebView.loadData(myCharacters, "text/html; charset=utf-8","UTF-8");
    
        2
  •  10
  •   Cameron Lowell Palmer    8 年前

    这个问题至少可以追溯到姜饼

    Issue 1733

    // Pretend this is an html document with those three characters
    String scandinavianCharacters = "øæå";
    
    // Won't render correctly
    webView.loadData(scandinavianCharacters, "text/html", "UTF-8");
    
    // Will render correctly
    webView.loadDataWithBaseURL(null, scandinavianCharacters, "text/html", "UTF-8", null);
    

    现在真正让人恼火的是,在三星Galaxy S II(4.0.3)上,loadData()工作正常,但在Galaxy Nexus(4.0.2)上测试时,除非使用loadDataWithBaseURL(),否则多字节字符是乱码。 WebView Documentation

    有些报告loadData调用的行为发生了变化,需要 mimeType charset=utf-8

    webView.loadData(scandinavianCharacters, "text/html; charset=utf-8", "UTF-8");
    

    讨论

    我第一次看到这个的时候,我的老板给我带来了他的手机,一款早期的Nexus,当时我正在三星Galaxy II上开发,它出现在我们的经济新闻订阅源中,他的手机上有很多非ASCII字符。因此,这不仅是安卓内部长期存在的问题,而且设备制造商之间也不一致。这是一个你必须防御性编程的问题。