2006年8月5日星期六

Opera字体问题的一篇笔记

首先需要在opera:config中关闭core X fonts支持,并确认打开了xft fonts支持。opera的字体选用机制已经很莫名其妙了,没必要还跟core X fonts纠缠。之后在高级设置的国际字体中,针对简繁体中文选择你喜欢的字体。如果运气足够好的话,你已经拥有了不输firefox的字体描绘品质,不过事情一般都不会这么顺利就是。

假如你发现采用gbk/gb2312编码的网页表现良好,但utf8编码的网页却很糟糕,那很有可能是你使用了utf8的locale,例如zh_CN.utf8。opera并不认为zh_CN代表间体中文,虽然有些怪异,可看起来就是这样。解决的办法是在非utf8的locale下启动opera,例如zh_CN.gbk或zh_CN.gb2312。

你可以每次都在term中敲LANG=zh_CN.gbk opera &启动程序,可以写一个脚本完成这件事,或者干脆把系统locale改为zh_CN.gbk。听起来有点不可思议,可我推荐最后一种解决方案。utf8的locale所带来的便利,远少于其带来的各种麻烦,虽然这并不是utf8的错。

补:上段没有说清楚,多解释几句。在zh_CN.utf8下访问GB2312页面,Opera会使用国际字体设置中的内容,但访问UTF8页面时则不会,而是按字体按名称排序选取。也就是说,locale为UTF8时,Opera所采用的字体是不可控的。

现在不管什么编码的网页应该都使用你指定的字体进行描绘了才对,可如果你发现中文字符间距不正常,小字间距过大,而大字又有重叠,那真是恭喜,我遇到过的问题你都遇到了,挺蓑。

安装X时一般都会附带装上两套中文点阵字体,分别是fangsong ti和song ti。如果fontconfig中打开了bitmap,即点阵字体支持,上述问题就很可能发生。假如opera中某些中文字显示得异常大,应该也是同样的原因造成的。因为fangsong ti只有12和16点阵,song ti也只有12、16、24这三种尺寸。至于问题的根源究竟在哪,是fontconfig还是字体本身,我也不清楚。个人感觉,opera看起来比较可疑。

解决的办法有好多,关掉fontconfig的点阵字体支持,或者删掉fangsong ti和song ti之类。后一种太暴力,所以我推荐前一种,反正点阵字体对于如今的桌面来说用处不大,不过代价就是文泉驿的点阵宋体也不能用了。

fontconfig的配置文件可能在很多地方,自己慢慢找。打开bitmap支持的部分可能会长成这样:

<selectfont>
 <acceptfont><pattern>
  <patelt name="scalable"><bool>false</bool></patelt>
 </pattern></acceptfont>
</selectfont>

改为:

<selectfont>
 <rejectfont><pattern>
  <patelt name="scalable"><bool>false</bool></patelt>
 </pattern></rejectfont>
</selectfont>

个人结论:opera的中文支持蛮糟的。