红联Linux门户
Linux帮助

FlashPlayer 9 for Linux中文显示问题的一些临时解决办法

发布时间:2007-09-28 15:32:49来源:红联作者:DominSer
FlashPlayer 9 for Linux的发布对我们这些关心Flex的Linuxer来说实在是个大好消息,但是对于中国用户来说确有一个非常不舒服的缺陷,Linux版本的FlashPlayer 9的中文显示有问题。以下以我的Linux中文字体环境对FlashPlayer 9 for Linux的中文显示进行分析,并给出一些临时的解决方法。

我的Linux发行版为Ubuntu feisty 7.04,使用的中文字体为文泉驿位图字体,我的/etc/fonts/language-selector.conf文件中字体配置部分片段如下:


serif

Bitstream Vera Serif
WenQuanYi Bitmap Song
DejaVu Serif
AR PL ShanHeiSun Uni
AR PL ZenKai Uni



以上配置下的中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替换文泉驿:


serif

Bitstream Vera Serif
SimSun
DejaVu Serif
AR PL ShanHeiSun Uni
AR PL ZenKai Uni



重新启动,再次打开前面不能显示的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字体。

以上只是一些临时的解决办法。
文章评论

共有 0 条评论