如何让Eula.java显示Unicode?

时间:2011-05-17 16:00:06

标签: java android unicode eula

来自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字符,因此我只能怀疑InputStreamReaderBufferedReaderStringBuilder在从资产文件到AlertDialog的路上对字符串做某事

如何让Eula.java显示Unicode?

2 个答案:

答案 0 :(得分:4)

InputStreamReader源数据编码;该类将数据转码为UTF-16字符数据。

答案 1 :(得分:2)

在“普通”Java中,single-argument InputStreamReader constructor使用平台默认编码。

Android定义了这个slightly different,说

  

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

因此,将file.encoding设置为资产中使用的编码(可能是UTF-8)可能就是这样做的。

或者(如果你可以编辑它),只需将构造函数调用更改为two-argument version并以这种方式指定正确的编码。