wine 中文支持问题 解决方案新方向(您使用 M$ 提供的字体的话,请无视本帖)

Wine、Cedega、CrossOver 等配置
聚焦深空
帖子: 10
注册时间: 2008-10-21 8:39

wine 中文支持问题 解决方案新方向(您使用 M$ 提供的字体的话,请无视本帖)

#1

帖子 聚焦深空 » 2009-02-25 20:40

对 wine 支持中文的问题,大伙把注意力大部分集中到补丁、注册表字体替换上,忽视了字体本身。

wine 源码中附带字体

代码: 全选

聚焦深空@localhost:~/wine-1.1.15$ ls fonts
courier.sfd  marlett.sfd        small_fonts_jp.sfd  system.sfd    tahoma.sfd
courier.ttf  marlett.ttf        small_fonts_jp.ttf  system.ttf    tahoma.ttf
genttf.ff    ms_sans_serif.sfd  small_fonts.sfd     tahomabd.sfd
Makefile.in  ms_sans_serif.ttf  small_fonts.ttf     tahomabd.ttf
wine 提供的字体

代码: 全选

聚焦深空@localhost:~/wine-1.1.15$ ls /usr/share/wine/fonts
coue1255.fon  hvgasys.fon   smalleg.fon   sserifeg.fon  vgas874.fon
coue1256.fon  jsmalle.fon   smaller.fon   sserifer.fon  vgasyse.fon
coue1257.fon  jvgasys.fon   smallet.fon   sserifet.fon  vgasys.fon
couree.fon    marlett.ttf   ssee1255.fon  svgasys.fon   vgasysg.fon
coure.fon     smae1255.fon  ssee1256.fon  tahomabd.ttf  vgasysr.fon
coureg.fon    smae1256.fon  ssee1257.fon  tahoma.ttf    vgasyst.fon
courer.fon    smae1257.fon  ssee874.fon   vgas1255.fon
couret.fon    smallee.fon   sserifee.fon  vgas1256.fon
cvgasys.fon   smalle.fon    sserife.fon   vgas1257.fon
wine 没有提供源码中提到的一个中文字体文件 vga936.fon

代码: 全选

聚焦深空@localhost:~/wine-1.1.15$ grep vga936.fon * -r
dlls/gdi32/freetype.c:    { 936, 936, "vga936.fon", "svgafix.fon", "svgasys.fon",
阅读 wine 源码,我们发现 wine-x.x.x/fonts 下缺少 vga936.sfd、对应的中文字体 xxx.ttf、及 Makefile.in 中相应的处理。

CJK 部分均有此问题,J 稍强点提供了部分字体。

由于历史问题,中文有多种编码,简体中文也有多种编码,对中文的处理也就复杂起来。
我们 wine 一个中文程序,其内部使用的中文编码可能是一种,也可能是多种,视软件维护者水平而定。

当前,不打补丁的 wine 能支持大部分中文软件,有些则部分正常显示、部分乱码。
从中文显示效果看,貌似使用 *.ttf 字体的部分显示正常(强制使用SimSun、NSimSun的例外),使用 *.fon 的显示一定乱码(貌似对应字体列表中的System)。

wine 中文支持问题 解决方案新方向:
依靠 fontforge、开源中文字体,补齐 wine 源码中字体缺失部分(vga936.sfd、vga936.fon 及其它语种缺失部分)。
头像
hongmy525
帖子: 236
注册时间: 2007-01-26 22:06
来自: 南宁 杭州
联系:

Re: wine 中文支持问题 解决方案新方向(您使用 M$ 提供的字体的话,请无视本帖)

#3

帖子 hongmy525 » 2009-02-26 20:44

关注,明天我也看看:)
tm0je
帖子: 88
注册时间: 2007-01-06 10:42

Re: wine 中文支持问题 解决方案新方向(您使用 M$ 提供的字体的话,请无视本帖)

#6

帖子 tm0je » 2009-02-27 9:01

俺是外行,不过看你说得头头是道的,应该没错,支持一下希望能彻底解决这个wine中文的问题
头像
想入非非
帖子: 8078
注册时间: 2008-07-14 22:42
来自: Beijing
联系:

Re: wine 中文支持问题 解决方案新方向(您使用 M$ 提供的字体的话,请无视本帖)

#7

帖子 想入非非 » 2009-02-27 10:11

很专业。。。不过一直就没有出现什么乱码的问题,直接调用宋体,得了 :em06
Ubuntu User
聚焦深空
帖子: 10
注册时间: 2008-10-21 8:39

Re: wine 中文支持问题 解决方案新方向(您使用 M$ 提供的字体的话,请无视本帖)

#8

帖子 聚焦深空 » 2009-02-27 14:19

fontforge 可以直接转换字体格式、encoding等。

1、打开 wqy 点阵字体 wenquanyi_12pt.pcf,默认 encoding iso-10646-1,
选择菜单 Encoding->Reencode->GB 2312,
选择菜单 File->Generate Fonts->选择格式 Win FON、修改文件名 vga936.fon->Save,
得到 vga936.fon。
vga936.fon.gz
步骤一生成文件的压缩版
(1.4 KiB) 已下载 98 次
但问题是这样得到的 vga936.fon 只有 3392字节,这不可能覆盖 GB2312 的汉字。
用 fontforge 打开 vga936.fon 发现其 encoding 为 Windows Latin(ANSI)。
看来 fontforge 处理 *.fon 有 bug。

2、使用 wqy 中文字体 wqy-zenhei.ttf,用 fontforge 转换其 encoding 为 GB2312,另存为 zh_CN.sfd,并重新生成 ttf 字体 zh_CN.ttf,
把 zh_CN.sfd zh_CN.ttf 添加到 wine-x.x.x/fonts,修改 Makefile.in 添加 vga936.fon 规则,
发现貌似 wine 提供的工具无法处理中文 *.fon 文件。
聚焦深空
帖子: 10
注册时间: 2008-10-21 8:39

Re: wine 中文支持问题 解决方案新方向(您使用 M$ 提供的字体的话,请无视本帖)

#9

帖子 聚焦深空 » 2009-02-27 23:48

原来的理解有些错误:

错误一、源码 dlls/gdi32/freetype.c 中有这么一段
/****************************************
* Notes on .fon files
*
* The fonts System, FixedSys and Terminal are special. There are typically multiple
* versions installed for different resolutions and codepages. Windows stores which one to use
* in HKEY_CURRENT_CONFIG\\Software\\Fonts.
* Key Meaning
* FIXEDFON.FON FixedSys
* FONTS.FON System
* OEMFONT.FON Terminal
* LogPixels Current dpi set by the display control panel applet
* (HKLM\\Software\\Microsoft\\Windows NT\\CurrentVersion\\FontDPI
* also has a LogPixels value that appears to mirror this)
*
* On my system these values have data: vgafix.fon, vgasys.fon, vga850.fon and 96 respectively
* (vgaoem.fon would be your oemfont.fon if you have a US setup).
* If the resolution is changed to be >= 109dpi then the fonts goto 8514fix, 8514sys and 8514oem
* (not sure what's happening to the oem codepage here). 109 is nicely halfway between 96 and 120dpi,
* so that makes sense.
*
* Additionally Windows also loads the fonts listed in the [386enh] section of system.ini (this doesn't appear
* to be mapped into the registry on Windows 2000 at least).
* I have
* woafont=app850.fon
* ega80woa.fon=ega80850.fon
* ega40woa.fon=ega40850.fon
* cga80woa.fon=cga80850.fon
* cga40woa.fon=cga40850.fon
*/
中文环境下有下面默认注册表项

代码: 全选

[HKEY_LOCAL_MACHINE\System\CurrentControlSet\Hardware Profiles\Current\Software\Fonts]
"FIXEDFON.FON"="svgafix.fon"
"FONTS.FON"="svgasys.fon"
"LogPixels"=dword:00000060
"OEMFONT.FON"="vga936.fon"
所以,中文环境下,
wine 字体 System 对应的应是 svgasys.fon,(系统默认的这个文件只有 ASCII 编码)
wine 字体 Terminal 对应的应是 vga936.fon。

错误二、源码 fonts 目录下的 *.sfd 可有可无,其是相应 *.ttf 源文件,*.ttf 才是需要的。

PS:fonts/system.ttf 可以直接替换为开源中文字体,但 wine 提供的工具 tools/sfnt2fnt 不能合理处理中文。
头像
huangjiahua
帖子: 3294
注册时间: 2005-03-30 0:27
联系:

Re: wine 中文支持问题 解决方案新方向(您使用 M$ 提供的字体的话,请无视本帖)

#10

帖子 huangjiahua » 2009-03-13 13:35

代码: 全选

for i in symbol.ttf tahoma.ttf simsun.ttf  svgasys.fon  vga936.fon; do sudo ln -sfv /usr/share/fonts/truetype/arphic/uming.ttc  /usr/share/wine/fonts/$i ; done
可用
跃过无数的时间断层,只为了在
头像
xrfang
帖子: 1116
注册时间: 2006-12-08 10:21

Re: wine 中文支持问题 解决方案新方向(您使用 M$ 提供的字体的话,请无视本帖)

#11

帖子 xrfang » 2009-03-17 17:00

我感觉还是不是字体问题。而是wine的一个bug。这个bug已经是作为1.2 release criteria之一了。
你爱用不用,没人逼你用--这就是Free的定义?
不,请自重,不要玷污Linux文化。
头像
huangjiahua
帖子: 3294
注册时间: 2005-03-30 0:27
联系:

Re: wine 中文支持问题 解决方案新方向(您使用 M$ 提供的字体的话,请无视本帖)

#12

帖子 huangjiahua » 2009-03-17 17:38

问题是 1.2 遥遥无期
跃过无数的时间断层,只为了在
头像
hongmy525
帖子: 236
注册时间: 2007-01-26 22:06
来自: 南宁 杭州
联系:

Re: wine 中文支持问题 解决方案新方向(您使用 M$ 提供的字体的话,请无视本帖)

#13

帖子 hongmy525 » 2009-03-18 9:55

huangjiahua 写了:

代码: 全选

for i in symbol.ttf tahoma.ttf simsun.ttf  svgasys.fon  vga936.fon; do sudo ln -sfv /usr/share/fonts/truetype/arphic/uming.ttc  /usr/share/wine/fonts/$i ; done
可用
这个办法是个好办法,但是我的机器上的winecfg还是乱码(在fc上的机器)。
头像
hongmy525
帖子: 236
注册时间: 2007-01-26 22:06
来自: 南宁 杭州
联系:

Re: wine 中文支持问题 解决方案新方向(您使用 M$ 提供的字体的话,请无视本帖)

#14

帖子 hongmy525 » 2009-03-18 9:58

还有最近发现中文字体ukai 和 uming导致wine运行某些程序的时候崩溃,卸载掉就好了。

我不知道具体的原因,搜索到下面的连接提到这两个字体有变化,不知道是否有帮助:

http://www.linuxfans.org/bbs/viewthread ... pid4884352

想着好好看看这个地方的,这几天一忙,又耽搁了 :em06 ,原来一直比较闲的
头像
huangjiahua
帖子: 3294
注册时间: 2005-03-30 0:27
联系:

Re: wine 中文支持问题 解决方案新方向(您使用 M$ 提供的字体的话,请无视本帖)

#15

帖子 huangjiahua » 2009-03-18 13:22

那俩字体我是直接咔嚓掉的

代码: 全选

sudo rm -rf /usr/share/fonts/truetype/arphic
在以前没别的字体的时候, 新文鼎字体确实很不错。

可是现在我们有了文泉驿正黑,
再看文鼎宋体就很那啥了,
于是就通通删掉,只使用文泉驿正黑。
跃过无数的时间断层,只为了在
回复