1 / 25

Unicode 和多语言信息处理

Unicode 和多语言信息处理. adoal. 内容. 早期的本地化技术 软件国际化和多语言信息处理的需求 常见字符集、编码介绍 Unicode Technology 简介 开发支持 Unicode 的程序 Internet 时代的多语言信息处理 相关资源 不涉及文字消息(界面)本地化. 早期的本地化技术. 问题的历史起因 电子计算机源起于英美,较少考虑国际需求 早期不面向普通用户,无交互 早期的本地化努力 互相独立缺乏沟通合作 逆向工程、外挂,支持不彻底 应用软件要做个例修改,缺乏复用 早期汉化的重要成果: GB2312 标准.

xena
Télécharger la présentation

Unicode 和多语言信息处理

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Unicode和多语言信息处理 adoal

  2. 内容 • 早期的本地化技术 • 软件国际化和多语言信息处理的需求 • 常见字符集、编码介绍 • Unicode Technology 简介 • 开发支持Unicode的程序 • Internet 时代的多语言信息处理 • 相关资源 • 不涉及文字消息(界面)本地化

  3. 早期的本地化技术 • 问题的历史起因 • 电子计算机源起于英美,较少考虑国际需求 • 早期不面向普通用户,无交互 • 早期的本地化努力 • 互相独立缺乏沟通合作 • 逆向工程、外挂,支持不彻底 • 应用软件要做个例修改,缺乏复用 • 早期汉化的重要成果:GB2312 标准

  4. 基于国际化的本地化 抽象出共同部分做成框架 文字处理 数据库 多媒体 …… 应用程序接口 国际化核心功能 本地化数据定义接口 英文定义 俄文定义 中文定义 ……

  5. 基于国际化的本地化-续 • 成果 • 抽象框架,功能复用,简化开发过程 • 可加载的本地化模块,易于扩展 • 宽字符机制,避开多字节编码的字节边界 • 缺陷 • 编码空间不兼容,导致“乱码” • 即使使用宽字符,不同语言的文字也无法共同处理

  6. 乱码一例 • GBK • Byte1 : [0x81, 0xFE] • Byte2 : [0x40, 0xFE] • Latin-1 • Single byte : [0xA0, 0xFF] • 序列 0xF1,0x61 如何解释? • 在GBK里是馻 • 在Latin-1里是ña 馻 ña

  7. 多语言需求的解决方法 • 问题:字符集太小 • 解决:设计大字符集并预留扩充位 • 问题:编码空间冲突 • 解决:设计新的编码方式 • 有状态编码,使用转义序列局部兼容性,编程复杂 • 无状态编码,为每个编码点保留唯一编码值需要码表转换,编程简单

  8. 常见字符集和编码 • ASCII • American Standard Code for Information Interchange • 起源于美国国会图书馆 • 等同于 ISO 646 • 包含英文大小写字母、阿拉伯数字、标点符号、控制符 • 7位编码 • 是后来各种字符集、编码的兼容性参考

  9. 常见字符集和编码-续 • ISO-8859 • 扩充了ASCII,加入欧洲语言的字母和符号 • 8位编码,扩充部分在b7=1的区域,避开控制符,与ASCII兼容 • 分为多个扩展集,适应不同文字 • ISO-8859-1 西欧 • ISO-8859-5 西里尔语 • ISO-8859-7 希腊语 • ISO-8859-15 增加欧元符号 • ……

  10. 常见字符集和编码-续 • 亚洲语言的字符集 • 中国大陆:GB系列 • 中国台湾:CNS、Big5 • 日本:JIS X • 韩国:KSC • 大字符集:CCCII、ANSI Z39.64、ISO 10646 • 亚洲语言的编码系统 • ISO-2022 多七位编码 • EUC 多八位编码 • 双字节编码:Shift JIS、GBK、Big5 • Unicode类编码 • 其它:HZ-GB-2312、GB18030、TRON、ANSI Z39.64等

  11. Unicode Technology • Unicode是什么? Unicode provides a unique number for every character,no matter what the platform,no matter what the program,no matter what the language. • 关于字符集、编码的一系列相关标准和处理技术的总和

  12. Unicode Technology-续 • Unicode的起源与发展 • 发起者:Xerox、Apple、IBM、Microsoft、Sun、DEC、Novell等 • Unicode与ISO-10646的竞争 • ISO 10646:4个8位元定长,避开控制区C0和C1,不要求b7都为0或1 • Unicode:直接使用16位元,不避C0和C1 • Unicode与ISO-10646的统一 • ISO 10646放弃避开控制区的方式 • Unicode并入ISO 10646的字面0,使用多八位元表示 • Unicode版本在不断更新 • 增加新的字符,修正错误

  13. Unicode Technology-续 • 字符索引值的结构 • 0ggggggg pppppppp rrrrrrrr cccccccc • b31固定为0 • 7位群(group)索引,8位面(plane)索引,8位行(row)索引,8位格(cell)索引 • 每个面的0xFFFE和0xFFFF值保留 • 总共可收录的字数为128×256×(256×256-2)=2,147,418,112个

  14. Unicode Technology-续 • Unicode的字符集 • UCS: Universal Multiple-Octet Coded Character Set • BMP: Basic Multilingual Plane即Plane 0 • UCS-2 • BMP的字符集 • 相当于早期的Unicode

  15. Unicode BMP字符子集 0000~007F: ASCII 0080~00A0: C1控制码 00A1~1FFF: 拼音文字 2000~28FF: 符号 2E80~33FF: 中日韩符号(部首、注音符号、日文假名、带括号数字等) 3400~4DFF: 中日韩表意文字扩充区 4E00~9FFF: 中日韩表意文字主区(20902个汉字) A000~A4FF: 彝族文字 AC00~D7FF: 韩文拼音组合字 D800~DFFF: 代用对,专用于UTF-16 E000~F8FF: 私有区,用于自造字 F900~FAFF: 中日韩兼容表意文字区 FB00~FFFD: 文字表现形式区(竖排标点、全角字符等) BMP外的字符子集 Plane1: 其它非表意文字 Plane2: 中日韩扩充文字和CNS11643兼容字 Unicode Technology-续

  16. Unicode Technology-续 • Unicode的编码方式 • Unicode Transformation Format • 目的: 效率、兼容性 • UTF-32 • 直接用一个32位元表示一个UCS字符 • UTF-16 • 用1~2个16位元表示一个UCS字符 • BMP字符为1个16位元,其它面字符用代用对 • UTF-8 • 用1~4个8位元表示一个UCS字符,理论上是6个 • ASCII为1个8位元,大部分拼音文字用2个8位元,表意文字用3个8位元,BMP之外的面用4个8位元 • Java里的UTF-8可能出现6个8位元,是历史原因,目前已定义的Unicode字符至多用到4个

  17. Unicode Technology-续 • UTF-8的编码规则

  18. Unicode Technology-续 • 字节序 • 用多八位元表示16位或32位整数 • Big-endian、Little-endian • 字节顺序标记 • 数值: FEFF • UTF-16BE: FE FF • UTF-16LE: FF FE • UTF-8: EF BB BF

  19. 开发支持Unicode的程序 • 操作系统和运行时库的Unicode支持 • Windows NT Family的Win32子系统 • 内部全面支持Unicode,内核、设备驱动、文件系统接口都使用Unicode • User level API全面支持Unicode,同时提供非Unicode的API兼容16位Windows下的源代码 • Unicode文本使用UTF-16编码 • Unicode IME:码表、微软输入法、拼音加加3.1 • Windows 9X的Unicode API只提供了入口,内部没有实现,调用则返回错误代码

  20. 开发支持Unicode的程序-续 • 操作系统和运行时库的Unicode支持-续 • 开放系统 • 各类Unix系统的syscall、vfs等涉及文本的地方都是char*,因此最好的折中方式是UTF-8 • glibc的wide char是UTF-32编码,但只适用于GNU系统;其它系统的libc未必如此 • XFree86/Xorg在保留复杂的X11复合文本的同时引入Xutf8系列API支持Unicode • gnome使用UTF-8作为内部编码,KDE通过QString支持Unicode • scim输入平台全面支持Unicode

  21. 开发支持Unicode的程序-续 • Windows的双模API • 文档中的原型 BOOL SetWindowText(HWND hWnd, LPCTSTR lpString); • 实际原型 BOOL SetWindowTextA(HWND hWnd, LPCSTR lpString); BOOL SetWindowTextW(HWND hWnd, LPCWSTR lpString); #ifdef UNICODE #define SetWindowText SetWindowTextW #else #define SetWindowText SetWindowTextA #endif

  22. 开发支持Unicode的程序-续 • 用MSLU开发支持Unicode的软件 • 原理 • 在NT上直接调用-W API • 在9X上截取-W系列API的调用转为-A系列API • 好处与局限性 • 在NT上不损失任何功能和性能,在9X上正常运行 • 支持的API不够完整,有些需要自己重载 • 并不能给9X带来支持Unicode的能力 • 出现太晚,大多数第三方软件开发商不支持 • 其它选择 • 双版本可执行程序 • 自己写自适应层

  23. 开发支持Unicode的程序-续 • 编程语言/开发环境对Unicode的支持 • C和C++ • wide char并不保证字符集和编码方式 • ISO C99提供了可选的ISO10646支持 • 必要时可借助IBM的ICU • Java • 从一开始设计就支持Unicode • 早期UCS-2,后来通过UTF-16全面支持 • Delphi • 以兼容性为借口不在VCL中支持Unicode • TntTWare Delphi Unicode Controls • 开源社区的脚本语言 • 积极支持Unicode

  24. 开发支持Unicode的程序-续 • Internet与Unicode • HTML用Unicode作为字符集 • Email信头和信体的编码设定 • IMAP协议用变种UTF-7传送邮件夹名称 • LDAPv3使用UTF-8传送文本 • SFTP使用UTF-8传送文件名 • 多语种域名解析系统 • IETF建议以后新发明的协议和URI表示法都支持UTF-8

  25. 相关资源 • 乱码大全 - bluesea@smth • CJK.INF & CJKV Information Procesing - Ken Lunde • Unicode与ISO10646 -曾士熊 • UTF-8 and Unicode FAQ (for Linux) – Markus Kuhn • Developing International Software (中译版《国际化软件开发》) – Microsoft Corp. • MSDN Library – Microsoft Corp. • RFC中的相关篇目 - IETF

More Related