显示Android无法显示的字符有哪些选择?

时间:2013-09-05 23:07:08

标签: android unicode utf-8 utf-16

我今天发现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编码的,所以不应该阻止它们显示字符。

以下是七个有问题的字符的所有小数转义:

  1. ⺅字符代码:11909(⺅)
  2. ⺌字符代码:11916(⺌)
  3. ⺾字符代码:11966(⺾)
  4. ⻏字符代码:11983(⻏)
  5. ⻖字符代码:11990(⻖)
  6. ⺹字符代码:11961(⺹)
  7. 字符代码:131490()
  8. 将前六个值插入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环境使这成为一个具有挑战性的命题。在我的应用程序中使用另一种字体选项吗?除此之外,我真的不知道如何继续。

1 个答案:

答案 0 :(得分:3)

  

我的应用中使用了另一种字体吗?

不确定。找到您有权随应用程序分发的字体并具有这些字符。将字体打包在assets/目录中。为该字体创建a Typeface object。使用setTypeface()上的TextView将该字体应用于必要的小部件。

Here is a sample application演示了如何将自定义字体应用于TextView