darkfire_xl 发表于 2005-10-23 16:17:07

本版顶尖高手请进

请问编码,字体,locale,渲染引擎这些东东他们之间的关系如何,大致的处理流程是什么样子的。比方说一个中文软件,它的窗口上的中文是如何被显示出来的,如果我向它输入中文,系统又是怎么处理的?

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

我一直想找一个比较详细又通俗易懂的答案。希望大侠们能够为我解难。 :lol:

4979458 发表于 2005-10-23 21:21:34

帮你顶,偶也想知道!

zerolin 发表于 2005-10-23 22:51:55

顶尖高手快点出来阿。哇哈哈哈。。。。。。。。。。。。。。。。 :mrgreen::mrgreen:

darkfire_xl 发表于 2005-10-24 08:08:56

我自己也顶啊~~~ :lol:

积木 发表于 2005-10-24 09:19:40

:roll:
我不是高手,随便说点。

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

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

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

:lol:
但愿说明白了。

wolf0403 发表于 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 进行输出的。

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

darkfire_xl 发表于 2005-10-24 14:05:32

鼓掌!!!喝彩!!!

quchen 发表于 2005-10-24 21:58:35

我不是高手,可我进来看了,不好意思 :lol:
页: [1]
查看完整版本: 本版顶尖高手请进