印地语字符将无法正确显示在Web视图中

时间:2013-02-18 09:54:43

标签: android android-layout

我有数据库,其中数据以\u092e\u0948\u0902 \u0924\的形式存储在hindi中,并使用下面的内容将该内容设置为webview。

  webview1.loadData(hindi_content, "text/html", "UTF-8");

但它会显示为

hindi content display as

我不知道为什么会这样。任何人请建议。如何解决这个问题!

5 个答案:

答案 0 :(得分:7)

这是因为大多数Android版本中loadData的编码参数存在错误。由于某种原因忽略此参数,因此不会呈现基于UTF-8的印地语字符。 要解决此问题,您可以使用以下备选方案之一。

webview1.loadData(hindi_content, "text/html; charset=UTF-8", null);


webview1.loadDataWithBaseURL(null, hindi_content, "text/html", "utf-8", null);

答案 1 :(得分:4)

这是this answer的重复:

您还需要浏览这些序列,并参考How to Unescape Unicode in Java

使用loadData在WebView中渲染UTF-8已经以某种形式或方式永久破坏。 Issue 1733

使用loadDataWithBaseURL而不是loadData。

// 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

答案 2 :(得分:1)

你需要使用字体才能支持hindi(Android还没有完全支持印地语) 创建 Typeface 的Singleton实例并调用createFromAsset(); 并将其添加到像这样的WebSettings

WebSettings webSettings = webView.getSettings();
webSettings.setFixedFontFamily(InstaceOFTypeFace);

答案 3 :(得分:1)

最后,我提出了将hindi内容加载到webview的解决方案。

我只是更改了我的加载字符串,不幸的是它会起作用。

webview.loadData(Hindi_css, "text/html; charset=UTF-8", null);

谢谢大家的努力。 :)

答案 4 :(得分:0)

你也可以使用这个。

String uri= Uri.encode(html file/url);
  webView.loadUrl(uri);

可能会对你有帮助。