【问题标题】:french letters in android views show question marksandroid视图中的法语字母显示问号
【发布时间】:2011-09-07 17:37:44
【问题描述】:

我从 utf8 数据库中读取数据,然后将其显示在列表视图中。 但是当我在浏览器中手动获取 xml 时,数据库中有包含 è é à á 字母的单词,它显示得很完美

但在列表视图中它显示的是问号

如何将列表视图的字符集设置为 utf8? 还是有其他方法?

【问题讨论】:

  • 翻译资源字符串时,它们的格式是否正确?
  • 刚刚发现,当我在 php 中对字符串执行 encode_utf8 时,它可以工作,但是在 unix 下以 encode 或 iconv 转换它并没有解决问题,有什么想法吗?
  • 当你的服务器提供xml页面时,你使用什么响应头和字符集download.oracle.com/javaee/1.3/api/javax/servlet/…

标签: android character-encoding character


【解决方案1】:

您应该仔细检查计算机上的文件编码。您的系统使用 latin-1 (iso-8859-1) 还是 utf-8 ?

在 latin-1 编码的文件中,在 utf-8 中声明 xmlns 时,口音看起来不错,但实际上并没有真正存储在 utf-8 中。

问候, 斯蒂芬

【讨论】:

  • 当我将此行添加到创建 xml 标头的 php 文件中时,您是对的 ("Content-Type:text/xml; charset=utf-8");当我忽略它并只使用 header ("Content-Type:text/xml"); chrome 说它是 latin-1 格式的。但我不明白为什么列表视图没有正确显示文本是因为我的系统字符集吗?
  • 那是我的意思,你的系统是什么? linux?如果是这样,您的字符集编码是什么?回声 $LANG
  • 哦,我看到我的系统是 utf8,但我尝试在我的 htc hero 上调试它并遇到了同样的问题...我不能将列表视图的字符集更改为 latin1 吗?
  • 不,一切都很好。您的系统应该是 utf-8 格式。 Java 也使用 utf。在 UI 中使用资源字符串时,重音是什么样的?
  • 好吧,我使用 xml 导入字符串,但它显示了一个带有问号的黑色方块。
【解决方案2】:

这真的很奇怪,因为 Android 使用 UTF-8……在我的例子中,我使用的是 UTF-8 编码的资源(意大利语、德语、俄语、中文)、文件等等 - 一切正常。

有 3 个选项为什么法语重音字符显示为“?”标记:

  1. 您在读取操作期间不小心在某处进行了从 UTF-8 到其他编码的隐式转换/Charset
  2. 存储在数据库中的数据并不是真正的 UTF-8。有时你需要使用正确的 SQLite pragma keyword
  3. 您的系统没有包含重音字符的正确字体

【讨论】:

  • 那么我猜存储的数据不是真正的 utf-8,因为我有 ascii 文件,我保存为 utf-8。但我敢打赌那没有成功?
  • @mars - 不,它不起作用,因为文件需要翻译成 utf-8。
  • 我尝试使用 iconv 并重新编码将它们转换为 utf8,它们在浏览器和 utf-8 下的 openoffice 中完美显示,但在 android 中仍然不好:s
  • 检查字体。我们有这个错误很长一段时间,然后发现它是一个字体问题。
【解决方案3】:

我曾经遇到过这个问题。

您应该完全删除您的数据库。我很确定您现在使用 iconv 和 sqlite 中的 pragma 对您的数据做了正确的事情。所以问题是你的包中的数据库是旧版本。因此,在 Eclipse 中清理项目,通过在卸载前删除数据库,从 android 完全卸载您的应用程序,更改 sqlite 安装程序版本代码(DatabaseHelper)并重新启动。

希望对你有帮助, 斯蒂芬

【讨论】:

  • 数据库不在我的网络服务器上的项目中
【解决方案4】:

我遇到了同样的问题。确保您没有使用 StringBufferInputStream (已弃用)。该方法会导致此问题。

【讨论】:

    【解决方案5】:

    使用

    Html.fromHtml(字符串)

    正确显示文本。

    【讨论】:

      【解决方案6】:

      让 response 是从您的服务器返回的对象。执行以下操作:

      response = Utilities.encodedToUTF8(response);
      
      public static String encodedToUTF8(String response) {
          try {
              response = new String(response.getBytes("ISO-8859-1"), "UTF-8");
          } catch (UnsupportedEncodingException e) {
              Log.e(TAG, "Error: " + e.getMessage());
          }
          return response;
      }
      

      【讨论】:

        【解决方案7】:

        由于我正在开发一个使用外语单词(包括法语)的应用程序,我将分享对我有用的东西。在我的应用程序中,每个带有特殊口音的字符都显示为带有白色问号的黑色菱形。我在笔记本电脑上有我的数据库副本,主要使用 Excel 将数据加载到其中(我创建 CSV 文件,然后通过DB Browser for SQLite 导入)。在我的 CSV 文件中,我可以正确看到所有的口音,但是在我将它们导入数据库后,到处都是黑色菱形。我尝试了编码、解码、使用 Html.fromHtml 等。唯一对我有用的是手动复制带有特殊字符的单词并将其粘贴到数据库中(使用程序)。这没有任何问题,现在我的数据库不包含黑色钻石。唯一的问题 - 因为这是一项手动工作,所以需要时间,很多时间。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-10-06
          • 2012-11-20
          • 2015-09-19
          • 2013-12-24
          • 2015-11-01
          • 1970-01-01
          相关资源
          最近更新 更多