来自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字符,因此我只能怀疑InputStreamReader
,BufferedReader
或StringBuilder
在从资产文件到AlertDialog的路上对字符串做某事
如何让Eula.java显示Unicode? p>
答案 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并以这种方式指定正确的编码。