Presentation is loading. Please wait.

Presentation is loading. Please wait.

Unicode和多语言信息处理 adoal.

Similar presentations


Presentation on theme: "Unicode和多语言信息处理 adoal."— Presentation transcript:

1 Unicode和多语言信息处理 adoal

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

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

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

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

6 馻 ña 乱码一例 GBK Latin-1 序列 0xF1,0x61 如何解释? Byte1 : [0x81, 0xFE]
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 西欧 ISO 西里尔语 ISO 希腊语 ISO 增加欧元符号 ……

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-续 字符索引值的结构 b31固定为0
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 Technology-续 Unicode BMP字符子集 BMP外的字符子集 AC00~D7FF: 韩文拼音组合字
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兼容字

16 Unicode Technology-续 Unicode的编码方式 Unicode Transformation Format UTF-32
目的: 效率、兼容性 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的编码规则 Unicode范围 UTF-8编码 00000000~0000007F
0xxxxxxx ~000007FF 110xxxyy 10yyyyyy ~0000FFFF 1110xxxx 10xxxxyy 10yyyyyy ~001FFFFF 11110xxx 10xxyyyy 10yyyyzz 10zzzzzz

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子系统
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++ Java Delphi 开源社区的脚本语言
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与ISO 曾士熊 UTF-8 and Unicode FAQ (for Linux) – Markus Kuhn Developing International Software (中译版《国际化软件开发》) – Microsoft Corp. MSDN Library – Microsoft Corp. RFC中的相关篇目 - IETF


Download ppt "Unicode和多语言信息处理 adoal."

Similar presentations


Ads by Google