2

code.google.com的 Eula 模块运行良好,但由于某种原因它不显示 Unicode 字符(例如 ©)。

我知道 AlertDialogs 完全能够显示 Unicode 字符,因为我在我的应用程序的其他对话框中这样做。

我能够在 Eula 的对话框和其他对话框之间找到的唯一区别是 Eula.java 对话框从 assets 文件夹中的文本文件中获取其字符串:

  private static CharSequence readEula(Activity activity) {
    BufferedReader in = null;
    try {
      in = new BufferedReader(new InputStreamReader(activity.getAssets().open(ASSET_EULA)));
      String line;
      StringBuilder buffer = new StringBuilder();
      while ((line = in.readLine()) != null)
        buffer.append(line).append('\n');
      return buffer;
    }
    catch (IOException e) {
      return "";
    }
    finally {
      closeStream(in);
    }
  }

该文本文件在 Notepad++ 中显示所有 Unicode 字符,所以我只能怀疑InputStreamReaderBufferedReader或者StringBuilder在从资产文件到 AlertDialog 的过程中对字符串做一些事情。

如何让 Eula.java 显示 Unicode?

4

2 回答 2

4

给出InputStreamReader源数据的编码;此类将数据转码为 UTF-16 字符数据。

于 2011-05-17T16:04:56.343 回答
2

在“普通”Java 中,单参数InputStreamReader构造函数使用平台默认编码。

Android对此的定义略有不同,说

此构造函数将字符转换器设置为属性中指定的编码,"file.encoding"如果该属性不存在,则回退到 ISO 8859_1 (ISO-Latin-1)。

因此,设置file.encoding为资产中使用的编码(可能是 UTF-8)可能就可以解决问题。

或者(如果您可以编辑它),只需将构造函数调用更改为两个参数版本并以这种方式指定正确的编码。

于 2011-05-17T16:07:29.177 回答