我今天发现Android无法显示我在日英词典应用程序中使用的一小部分日文字符。
当我尝试通过TextView.setText()
显示角色时出现问题。当我尝试在TextView中显示它们时,下面的所有字符都显示为空白。尽管如此,它似乎不是编码的问题 - 我将这些字符存储在SQLite数据库中并且已经验证Android可以理解这些字符。将字符转换为(int)会为除一个字符之外的所有字符检索正确的Unicode十进制转义符:
String component = cursor.getString(cursor.getColumnIndex("component"));
Log.i("CursorAdapterGridComponents", "Character Code: " + (int) component.charAt(0) + "(" + component + ")");
我不得不使用Character.codePointAt()
来获取一个有问题的字符的小数转义:
int codePoint = Character.codePointAt(component, 0);
我认为我做错了什么,而且由于String默认是UTF-16编码的,所以不应该阻止它们显示字符。
以下是七个有问题的字符的所有小数转义:
将前六个值插入http://unicode-table.com/en/会显示相应的Unicode编号,因此我毫不怀疑它们是有效的UTF-8字符。
第七个字符只能从UTF-16字符表中检索:http://www.fileformat.info/info/unicode/char/201a2/browsertest.htm。我无法在setText()中使用其5个字符的Unicode编号(如“\ u201a2”),因为正如我今天早些时候发现的那样,Android不支持超过0xFFFF的Unicode字符串。结果,该字符串被评估为“\ u201a”+“2”。这仍然无法解释为什么前六个字符不会出现。
此时我有哪些选择?我的第一直觉是用有问题的角色制作图形,但Android的高度可变的DPI环境使这成为一个具有挑战性的命题。在我的应用程序中使用另一种字体选项吗?除此之外,我真的不知道如何继续。
答案 0 :(得分:3)
我的应用中使用了另一种字体吗?
不确定。找到您有权随应用程序分发的字体并具有这些字符。将字体打包在assets/
目录中。为该字体创建a Typeface
object。使用setTypeface()
上的TextView
将该字体应用于必要的小部件。
Here is a sample application演示了如何将自定义字体应用于TextView
。