我的Linux发行版为Ubuntu feisty 7.04,使用的中文字体为文泉驿位图字体,我的/etc/fonts/language-selector.conf文件中字体配置部分片段如下:
以上配置下的中zh_CN.UTF-8语言下,Flash中的中文一片空白。
首先,以以前FlashPlayer7的经验,我现查看了下/usr/lib/flashplugin-nonfree/libflashplayer.so看flashPlayer 9是否和7一样也将中文字体写死了,所以因为找不到对应的中文字体所以不能显示:
strings /usr/lib/flashplugin-nonfree/libflashplayer.so | grep font
strings /usr/lib/flashplugin-nonfree/libflashplayer.so | grep Font
strings /usr/lib/flashplugin-nonfree/libflashplayer.so | grep 'AR PL'
查看输出结果,并没有绑定字体,看样子FlashPlayer9比7字体选择方面更智能了。
既然不是这个原因,那们是不是FlashPlayer没有加载文泉驿字体呢,OK,我们就来看看我们打开包含中文的SWF文件时,FlashPlayer过程中的字体加载过程,使用以下命令启动火狐:
strace firefox 2>&1 |grep font
然后打开一个包含中文字符的SWF文件,并查看终端屏幕的输出
大家应该知道文泉驿不是ttf矢量字体,而是位图字体,那们是不是FlashPlayer不支持位图字体呢,我们将/etc/fonts/language-selector.conf修改如下,使用SimSun替换文泉驿:
重新启动,再次打开前面不能显示的SWF文件,一切显示正常。
OK,结论就是因为不支持位图字体所以不能正确显示了哦。下面我们来着手解决这个问题,我还没找到完美的解决办法,以下是一些临时的办法:
一、当然是在Linux中配置中文字体使用TTF字体就可以了,比如上面的使用SimSun
二、在Flex中使用CSS指定使用的设备字体,这样做的缺点是如果客户端没有你使用的字体,那们中文显示还是有问题,比如SimSun:
global {
fontFamily: "SimSun";
}
三、使用嵌入字体的方式,这样做的好处是不管客户端是否有该中文字体,都可以正常显示,缺点是因为嵌入了中文字体会使SWF文件边的大很多,以下嵌入msyh.ttf字体:
@font-face {
src:url("msyh.ttf");
fontFamily: msyhFont;
}
global {
fontSize:12;
fontFamily: "msyhFont;";
}
@font-face表示嵌入msyh.ttf,并将字体命名为msyhFont,global定义全局使用msyhFont字体。
以上只是一些临时的解决办法。

