【问题标题】:Special chars are replaces with a square in android app特殊字符在android应用程序中被替换为正方形
【发布时间】:2012-01-05 11:38:32
【问题描述】:

在我的安卓应用中,我做了一个简单的吐司

Toast.makeText(
        parent.getApplicationContext(),
        parent.getResources().getIdentifier(result, "string",
        parent.getPackageName()), Toast.LENGTH_LONG).show();

这个

parent.getResources().getIdentifier(result, "string", parent.getPackageName())

检索名称与来自strings.xml 的结果匹配的字符串。我有一个用于英语和德语的 strings.xml 文件。问题是德语中的特殊字符(如 Ü Ö Ä)无法正确显示。它们被一个方形符号替换。

strings.xml 是 utf-8 编码的。

问题出在哪里,我该如何解决?

【问题讨论】:

  • 除非您知道确切为什么您需要它,否则不要使用getApplicationContext()。在这种情况下,您肯定不需要它。请使用parent,而不是parent.getApplicationContext()。我怀疑这会解决你的问题,但我肯定会从那里开始,因为滥用 Application 会导致奇怪的 UI 行为。
  • toast 在扩展 AsyncTask 而非活动的类中执行。所以 parent 是创建任务的活动......
  • 这仍然意味着您应该使用parent,而不是parent.getApplicationContext()
  • 好的,我改了,但正如你所说的,问题仍然存在。
  • 是的,我并不感到惊讶。通常,正方形表示字体中缺少字形。但是,如果您在相当普通的设备或仿真器上测试它,它肯定有DroidRuboto 字体中带有变音符号的字符的字形。因此,我不太确定为什么在这种情况下你会得到正方形。

标签: android character-encoding


【解决方案1】:

ArtWorkAD,

您的问题似乎是由Toast.makeText() 方法在从资源中提取特殊字符时未使用正确的字符集引起的。

我建议作为调试步骤,您可以独立地从资源中提取字符串并使用

Toast.makeText(Context context, CharSequence text, int duration).show();

重载以呈现您的文本。这样您就可以确认文本是否符合您的预期并缩小您的问题范围。

【讨论】:

    【解决方案2】:

    【讨论】:

    • 对他的问题一点帮助都没有。
    【解决方案3】:

    您可以使用自定义对话框而不是使用 Toast Message 来在 TextView 上显示此字符串。现在使用

        TextView textView=new TextView(this);
        textView.setText(Html.fromHtml("your string"));
    

    希望这对你有用,但还没有尝试过

    【讨论】:

      猜你喜欢
      • 2012-11-16
      • 1970-01-01
      • 1970-01-01
      • 2015-07-28
      • 2014-11-03
      • 2019-11-04
      • 2019-04-05
      • 2019-09-23
      • 1970-01-01
      相关资源
      最近更新 更多