字符UTF-16LE没有显示在我的Android Nougat上

时间:2017-03-04 19:23:19

标签: android utf-8 character-encoding textview

enter image description here Characters correctly show

我正在开发一个Android应用程序,我需要在TextView上显示特殊的UTF-16LE字符,如æ或Œ,或者我发布的图片中的字符。

我无法理解为什么一切都在牛轧糖模拟器以及Lollipop和Marshmallow智能手机上正确显示,而在我的个人Android牛轧糖上我看不到这些字符,我只能看到“::”字符而不是正确的。

小心,在左图中,'字符不是正常的重音,我不是正常的我)

为什么我无法在智能手机上显示这些特殊字符?我该如何处理?

我调试了我的应用程序,并在TextView上正确设置了字符;但是,我仍然无法正确阅读它们。

似乎我的智能手机(最新软件更新中的OnePlus3)无法读取UTF-16LE字符,但仍然,我真的很难面对这样的事情。

非常感谢任何帮助,

度过愉快的一天。

更新:我在智能手机上下载了https://play.google.com/store/apps/details?id=org.madore.android.unicodeMap,似乎我的智能手机上没有很多unicode字符,有没有办法解决它?我只需要安装更好的字体吗?

1 个答案:

答案 0 :(得分:0)

我解决了我的问题,这就是我的所作所为。 (像往常一样,还要感谢我的队友@Claffolo)

我在Android资产中导入了像Gentium这样的免费版权字体。 /资产/字体/

在我的项目中,我导入了新字体并初始化了一个类似

的变量
        Typeface plain = Typeface.createFromAsset(getActivity().getAssets(), "fonts/GentiumPlus-I.ttf");

    final TextView text_view = (TextView)view.findViewById(R.id.text_view);
    text_view.setTypeface(plain);
   text_view.setText("[String with special characters]");

当我使用所有特殊字符加载ArrayList时,请说出 wordlist

我是按照以下方式做到的:

//Loading my Wordlist
BufferedReader line_reader = new BufferedReader(new InputStreamReader(activity.getResources().openRawResource(R.raw.ipautf16le), Charset.forName("UTF-16LE")));

String line;
try {
    while ((line = line_reader.readLine()) != null) {
        WordList.add(line);
    }
} catch (IOException e) {
    e.printStackTrace();
}

Collections.sort(WordList);

这就是全部。