朝鲜语/韩文字符在Anrdoid4.2.2上不显示Korean text isn't shown in Android 4.2.2

Korean text isn't shown in Android 4.2.2

环境

  • 编译SDK:AIR 3.6/3.7
  • 测试设备:Nexus 7(Android 4.2.2)/Samsung Note 2(Android 4.1.2)/Moto Atrix 2(Android 4.1.2)
  • 测试模拟器:Android 4.2.2/4.1.2

现象

  • App中使用朝鲜语/韩文字符(UTF-8编码)的文本,在Android4.2.2系统上不能显示,模拟器和设备均出现这个问题;
  • 不仅是App的显示有这个问题,App在Android系统App列表中的名称也无法显示;
  • 无论设备语言是英文、朝鲜语/韩文还是中文,这个问题都会出现;
  • 同样的App放到Android 4.1.2及以下系统中均表现正常;
  • 使用中文字符(UTF-8编码)的文本,无论在Android 4.2还是其他系统上,均表现正常;
  • 如果希望看现象截图,可以看这里:http://forums.adobe.com/message/5361043#5361043

解决过程

  • 我在 Android 项目的 issue 列表中发现了同样的问题 Korean font/locale unavailable in Android 4.2 ,但该问题没有得到正面答复。从截图上看,提出该问题的也是中国开发者。这是个巧合吗?
  • 我怀疑是AIR的问题,因为如果这是Android操作系统问题,那韩国的Android 4.2开发者怎么办?为什么我用英文搜索不到相关信息?我在 AIR Bugs and Performance Issues 上询问了这个问题;
  • 2013-05-29,Adobe的员工Pahup回复我AIR 3.8 beta解决了这个问题。我在labs上看了一下,3.8 beta确实更新了,更新时间就是今天。但经过实际测试,这个问题依然存在。
  • 2013-05-30,Pahup回复说需要设置字体属性,尝试之后,果然OK。

解决方法

首先确保使用AIR 3.8SDK。

若使用Flex,可以通过设置 fontFamily 来支持Korean字符显示,例如:

1<s:Label text="고속도로"  fontFamily="NanumGothic"/>

若使用TextField,可以通过设置 TextFormat 的 font 属性来支持Korean字符显示, 例如:

1var __label:TextField = new TextField();
2var __ft:TextFormat = new TextFormat();
3__ft.font= "NanumGothic";
4__label.defaultTextFormat = __ft;
5__label.text = "고속도로";

以上做法,只有AIR 3.8支持。因此,我还必须要等待AIR 3.8发布。