【问题标题】:Hindi Character will not display in web view correctly印地语字符将无法正确显示在 Web 视图中
【发布时间】:2013-02-18 09:54:43
【问题描述】:

我有一个数据库,其中数据以印地语存储为\u092e\u0948\u0902 \u0924\,并使用下面的方法将该内容设置为 webview。

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

但它会显示为

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

【问题讨论】:

  • 这个问题已经回答了。这是重复的。
  • 那边说的那个技巧还是不行。您能否检查一下我用于显示印地语文本的字符串!您能否再次提出问题!
  • मैं त 你指的是这个序列吗?
  • 在我看来你有两个问题。将该序列转义为 UTF-8,然后渲染它。你遇到的第一个问题是确保你正确地取消了这个,我猜你没有这样做。

标签: android android-layout


【解决方案1】:

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

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


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

【讨论】:

  • 您能否提供一个小样本,说明hindi_content 包含的确切内容(格式等)?
  • "\u092e\u0948\u0902 \u0924\" 印地语单词存储在数据库中。它看起来像“आप”。
  • 好的,当您在调试期间检查hindu_content 变量时(使用断点/监视),它仍然包含那个确切的字符串?
  • \u092e\u0948\u0902 \u0924 是正确的顺序。没有尾随反斜杠。这是我前面提到的两个问题。正确地取消转义序列并在 Web 视图问题中呈现它。
  • 是的,它的原因是我把它作为字符串但它没有反斜杠。仍然面临同样的问题。
【解决方案2】:

这是this answer的副本:

您还需要取消转义这些序列并参考How to Unescape Unicode in Java

在 WebView 中使用 loadData 渲染 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

【讨论】:

    【解决方案3】:

    您需要使用字体才能支持印地语(android 尚未完全支持印地语) 创建 Typeface 的 Singleton 实例并调用 createFromAsset(); 并像这样将其添加到 WebSettings

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

    【讨论】:

      【解决方案4】:

      最后我想出了将印地语内容加载到 webview 的解决方案。

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

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

      感谢大家的努力。 :)

      【讨论】:

        【解决方案5】:

        你也可以用这个。

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

        也许这会对你有所帮助。

        【讨论】:

          猜你喜欢
          • 2017-12-01
          • 2012-11-11
          • 2015-12-06
          • 2017-02-12
          • 2012-05-06
          • 2018-05-19
          • 1970-01-01
          • 1970-01-01
          • 2023-01-31
          相关资源
          最近更新 更多