QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1394|回复: 7

本版顶尖高手请进

[复制链接]
发表于 2005-10-23 16:17:07 | 显示全部楼层 |阅读模式
请问编码,字体,locale,渲染引擎这些东东他们之间的关系如何,大致的处理流程是什么样子的。比方说一个中文软件,它的窗口上的中文是如何被显示出来的,如果我向它输入中文,系统又是怎么处理的?

特别是locale的用处,虽然看了很多文章,但还是没搞懂。我觉得主要是我不了解他们之间的关系和原理。

我一直想找一个比较详细又通俗易懂的答案。希望大侠们能够为我解难。
发表于 2005-10-23 21:21:34 | 显示全部楼层
帮你顶,偶也想知道!
回复

使用道具 举报

发表于 2005-10-23 22:51:55 | 显示全部楼层
顶尖高手快点出来阿。哇哈哈哈。。。。。。。。。。。。。。。。   
回复

使用道具 举报

 楼主| 发表于 2005-10-24 08:08:56 | 显示全部楼层
我自己也顶啊~~~
回复

使用道具 举报

发表于 2005-10-24 09:19:40 | 显示全部楼层

我不是高手,随便说点。

locale 决定的是字符编码方案的。linux上面的程序只要使用locale,那么就具备了多语言对应的特性。比如说
你是用了

zh_CN.GB2312的locale,那么程序使用locale都会用这个字符集来解释字符串,进而显示中文
freetype 是字体渲染引擎,当然还有别的引擎,但是现在比较新的软件都用这个引擎画字,这个引擎根据每个字的特性把字一个一个的画在屏幕上面。

fontconf 这是一个选字引擎,有画字的引擎了,但是画字的引擎并不知道该用什么字体画,怎么画,这个时候,画字引擎就去问选字引擎,从选字引擎里面取出画字的信息,比如说用什么字体,画的字的时候要不要 AA(就是论坛里面的总提到的抗锯齿),要不要auto-hint(显示最佳化),然后把字画在屏幕上。


但愿说明白了。
回复

使用道具 举报

发表于 2005-10-24 12:51:43 | 显示全部楼层
locale 是一组环境变量,包括 LANG, LC_*。尤其是 LC_* 这一组环境变量,Linux 中用于软件国际化(i18n)的库 gettext 在工作时依赖这一组环境变量,匹配使用对应的本地化方案(l10n)。当一个软件使用 gettext 进行国际化的时候,如果运行时 gettext 检测到 LC_ALL 为 zh_CN,则会自动搜索针对当前软件的、LC标记为 zh_CN 的本地化方案(通常是一个.mo语言包。。一定程度类似 MFC 程序中的资源里的字符串表),并将本地化过的信息显示在软件中,以取代默认的英文版(或者占位符)信息。

计算机只能处理二进制数据,所以每个字符每个符号都需要表示成一个二进制编码序列。这个编码的规则,就是诸如 GBK 或者 utf-8 这样的『编码』了。所谓字体,则是一个将『编码』与『字符图像、字型(Glyph)』之间的映射关系。一个字体中可以包含多种编码到Glyph 之间的映射关系。

当一个程序要输出显示一条信息的时候,gettext 从对应的 mo 中得到最终需要显示的字符串,选字引擎(fontconfig)根据系统配置和程序配置选择将要使用的字体(simsun.ttf之类),然后渲染引擎(freetype / Xft)将以上两组信息汇总,从字体中获取合适的 Glyph,然后交由X进行渲染(输出)。Xft 似乎是利用 X Render extension 进行输出的。

可以参考我朋友的一片日志:
[code:1]http://www.lidaibin.com/blog/index.php?action=show&id=35[/code:1]
回复

使用道具 举报

 楼主| 发表于 2005-10-24 14:05:32 | 显示全部楼层
鼓掌!!!喝彩!!!
回复

使用道具 举报

发表于 2005-10-24 21:58:35 | 显示全部楼层
我不是高手,可我进来看了,不好意思
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-9 05:04 , Processed in 0.038754 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表