来自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?
发布于 2011-05-18 00:04:56
将源数据的编码交给InputStreamReader;该类将数据转换为UTF16字符数据。
发布于 2011-05-18 00:07:29
在“普通”Java中,single-argument InputStreamReader constructor使用平台默认编码。
安卓已经定义了这个 different,他说
此构造函数将字符转换器设置为
"file.encoding"属性中指定的编码,如果该属性不存在,则回退到ISO 8859_1 (ISO- back 1)。
因此,将file.encoding设置为资产中使用的编码(可能是UTF-8)可能正好可以完成此任务。
或者(如果您可以编辑它),只需将构造函数调用更改为two-argument version并以这种方式指定正确的编码即可。
https://stackoverflow.com/questions/6033726
复制相似问题