LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1091|回复: 17

关于字体的问题

[复制链接]
发表于 2009-9-22 22:51:28 | 显示全部楼层 |阅读模式
有一些关于字体的疑问:

1. 编码

UTF-8, UTF-16, UCS-2, UCS-4, GB2312, GBK, ISO10646, CP936...

2. 以上编码的操作, 如排序, 搜索

3. 字库文件如 bdf, pcf, spd, ttf, ttc, otf, spd, afm, pfa, pfb
    对应的转换工具, 显示文件信息的工具, 字体编辑的工具

4. 知道文字的编码, 和字库文件,  怎么转换成点阵信息画到屏幕上.
    转换时, 各种字库的效率如何..

头都大了..
 楼主| 发表于 2009-9-22 22:57:27 | 显示全部楼层
知道了3个工具:

1. bdf2pcf
2. pcf2bdf
3. otf2bdf, 这个可以转换ttf和otf.  http://www.math.nmsu.edu/~mleisher/Software/otf2bdf/

知道了2个编辑工具
1. gbdfed
2. xmbdfed

功能完全相同, 只是一个依赖于gtk2, 一个依赖于openmotif

知道了:
UTF-8下, 所有的汉字都用3个字节表示... 简直是英语专用嘛

知道了:
微软现在用的是UTF-16.
为了用UTF-16, 字符串相关的API全部重定义了, 代价不可谓不大.
回复 支持 反对

使用道具 举报

发表于 2009-9-23 00:02:05 | 显示全部楼层
.....楼主想要干什么?开发字体吗?
回复 支持 反对

使用道具 举报

发表于 2009-9-23 06:23:20 | 显示全部楼层
Post by swordhui;2029288
知道了3个工具:

1. bdf2pcf
2. pcf2bdf
3. otf2bdf, 这个可以转换ttf和otf.  http://www.math.nmsu.edu/~mleisher/Software/otf2bdf/

知道了2个编辑工具
1. gbdfed
2. xmbdfed

功能完全相同, 只是一个依赖于gtk2, 一个依赖于openmotif

知道了:
UTF-8下, 所有的汉字都用3个字节表示... 简直是英语专用嘛

知道了:
微软现在用的是UTF-16.
为了用UTF-16, 字符串相关的API全部重定义了, 代价不可谓不大.

我以为 UTF-8 是用两个字节表示的?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-9-23 14:14:30 | 显示全部楼层
Post by pinkme005;2029305
.....楼主想要干什么?开发字体吗?

不想开发字体, 想了解内部机制
这样出了问题容易定位
了解机制后, 可以保证部分代码能在嵌入式重用, 即使不用X.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-9-23 15:01:06 | 显示全部楼层
Post by d00m3d;2029326
我以为 UTF-8 是用两个字节表示的?

刚开始我也认为大部分常用汉字可以用2字节显示.. 但看了UTF-8的编码机制后, 彻底无语..

汉字在Unicode的位置是0x4e00开始的, 按xxxxyyyy yyzzzzzz的方式转成二进制, 则
  1. xxxx=0100
  2. yyyyyy=111000
  3. zzzzzz=000000
复制代码

转成UTF-8时,  要这样扩展:
  1. 1110xxxx 10yyyyyy 10zzzzzz
复制代码

即0x4E00这个汉字, UTF-8的编码为:
  1. 11100100 10111000 10000000
复制代码

即 E4 B8 80, 三个字节.
所有的汉字都如此

只有欧洲国家的有可能用2个字节表示.

由此看来UTF-8适合中英文混合表示的场景, 比如程序源码, HTML语言, 但不适合做汉字文章的存储, 这样会浪费1/3的存储空间... 这个浪费代价不小, 如果用压缩机制的话, 可以忽略.

如果想存储汉字文章, 最好用UTF-16, 几乎所有的常用字都2字节.

所以我们的Linux系统要既能处理UTF-8和UTF-16, 好在UTF-8太有个性了, 很容易自动识别一串编码到底是UTF-8还是UTF-16.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-9-23 15:25:51 | 显示全部楼层
知道了:

GB2312: 大陆最基本的编码体系, 支持英文, 常用汉字, 部分欧洲语系.
GBK: 兼容GB2312, 加入了大量生僻汉字, 加入了繁体字和日文/韩文用汉字.
GB18030: 兼容GBK, 又加入了蒙古文, 维吾尔文, 藏语等少数民族语言.....  

GB18030比起unicode还是差很多, 毕竟世界上还有很多其他民族.

对我们来说, 电脑需要支持3种编码: GB18030, UTF-8, UTF-16.

GB18030的优势是: 专为汉语设计, 兼容ASCII, 在程序代码, HTML表示, 中文文章保存等都能达到最优性能. 但是.... 有很多中国外的语言不被支持.

GB18030应该逐渐用UTF-16/UTF-8替代.

你的Linux系统, Locale怎么设置?

我们真的需要UTF-16/UTF-8吗?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-9-23 15:28:52 | 显示全部楼层
知道了:
BIG5的设计比较失败..
有"许盖功"问题;)
还有一个鸡肋的设计: 自造字区, 这在编码设计上来说, 是完全错误的, 因为有岐义性.
比GB2312好的地方只有汉字多
比GB18030就不如了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-9-23 15:58:31 | 显示全部楼层
基本弄清楚了UTF-8/UTF-16之间的变换.

新的问题:
GB18030 和 UTF-16之间怎么转换呢? 有规律吗? 还是通过查表?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-9-23 16:06:19 | 显示全部楼层
再聊聊字库的问题.

字库应该支持一种或多种编码, 如ISO 8859-1, 8859-2, Unicode, GB18030等, 目前貌似所有的字库都只支持Unicode, 其他编码先转为unicode, 再访问字库.

字库的类型:
(1) bitmap固定宽度类型, 最早期的格式.  访问很简单, 读出位图信息画到屏幕就OK. 效率最高
(2) bitmap可变字符宽度类型, 字符宽度可以变的, 需要一张表, 表示每个字符的宽度.
(3) Adobe Type1 PostScript, 非点阵, 通过数学公式描述文字. 效率?!
(4) True Type, 是苹果和微软联合开发的, 对抗Type1. (他们居然也有合作的时候...) 怎么转为点阵? 效率?
(5) OpenType..  这次是微软和Adobe合作... 目前最流行的方式.
(6) Speedo?
(7) CleanType.. 微软专门为液晶显示器优化的字体渲染方法
回复 支持 反对

使用道具 举报

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

本版积分规则

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