Chinaunix

标题: 使用XftDrawStringUtf8混合显示中英文的问题[已结贴] [打印本页]

作者: kemean    时间: 2009-02-15 23:37
标题: 使用XftDrawStringUtf8混合显示中英文的问题[已结贴]
我在对中英文混合字符串中的字符, 一个个显示时, 碰到如下问题:

1. 如果全部是中文, 则使用匹配到的中文字体来显示, xftdraw时的unicode codepoint正确, 显示正常。
2. 如果全部是英文, 也正常。
3. 如果中文后面跟英文, 比如 "退出 Exit", 此时,中文会显示成乱码,奇怪的就是, 匹配到的字体跟取出的codepoint全是对的!而且, 只显示“退出 "也正常, 多个英文字符后, 原本正常显示的"退出 "就变成乱码了。
4. 如果英文后面跟中文, 问题跟第3点一样, 相反的是, 这时英文显示正常, 但中文变成乱码了。

以上, 英文是匹配到dejavu sans来取glyphs来显示的, 中文是匹配到microsoft yahei取glyphs显示。

在字体加载正确, codepoint也正确, 编码也正确的情况下, 为什么混合显示会出现这么奇怪的问题呢?

注, 我是修改了XftDrawStringUtf8函数, 把原本的XftCharIndex, 改为, 先match一款适合的字体, 再做XftCharIndex, 其它的逻辑全部没改。


请高人指点。谢谢。

[ 本帖最后由 kemean 于 2009-2-15 23:42 编辑 ]
作者: kemean    时间: 2009-02-15 23:41
晕, 刚发完贴子, 就想通了:(

glyphs是字符在字体中的索引, 如果想实现混合字体显示混合语言的文字, 必须用不同字体来做xftcharindex, 不但如此, 还必须先把这个 glyphs画出来, 我居然忽略了这一点, 以为单单靠改下xftcharindex就可以OK了, 实际上, glyphs作为字体中字符的索引, 必须跟操作的font一起draw, 否则, 就会出现我上述的乱码问题:(

结贴:(




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2