25
Unicode Unicode 和和和和和和和和 和和和和和和和和 adoal adoal

Unicode 和多语言信息处理

  • Upload
    xena

  • View
    101

  • Download
    0

Embed Size (px)

DESCRIPTION

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

Citation preview

Page 1: Unicode 和多语言信息处理

UnicodeUnicode 和多语言信息处理和多语言信息处理

adoaladoal

Page 2: Unicode 和多语言信息处理

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

Page 3: Unicode 和多语言信息处理

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

Page 4: Unicode 和多语言信息处理

基于国际化的本地化基于国际化的本地化抽象出共同部分做成框架抽象出共同部分做成框架

应用程序接口

国际化核心功能

本地化数据定义接口

英文定义 俄文定义 中文定义 ……

文字处理 数据库 多媒体 ……

Page 5: Unicode 和多语言信息处理

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

处理处理

Page 6: Unicode 和多语言信息处理

乱码一例乱码一例GBKGBK– Byte1 : [0x81, 0xFE]Byte1 : [0x81, 0xFE]– Byte2 : [0x40, 0xFE]Byte2 : [0x40, 0xFE]

Latin-1Latin-1– Single byte : [0xA0, 0xFF]Single byte : [0xA0, 0xFF]

序列 序列 0xF1,0x61 0xF1,0x61 如何解释?如何解释?– 在在 GBKGBK 里是馻里是馻– 在在 Latin-1Latin-1 里是里是 ñaña

馻馻

ñaña

Page 7: Unicode 和多语言信息处理

多语言需求的解决方法多语言需求的解决方法问题:字符集太小问题:字符集太小– 解决:设计大字符集并预留扩充位解决:设计大字符集并预留扩充位问题:编码空间冲突问题:编码空间冲突– 解决:设计新的编码方式解决:设计新的编码方式– 有状态编码,使用转义序列有状态编码,使用转义序列

局部兼容性,编程复杂局部兼容性,编程复杂– 无状态编码,为每个编码点保留唯一编码值无状态编码,为每个编码点保留唯一编码值

需要码表转换,编程简单需要码表转换,编程简单

Page 8: Unicode 和多语言信息处理

常见字符集和编码常见字符集和编码ASCIIASCII– American Standard Code for Information American Standard Code for Information

InterchangeInterchange– 起源于美国国会图书馆起源于美国国会图书馆– 等同于 等同于 ISO 646ISO 646– 包含英文大小写字母、阿拉伯数字、标点符号、包含英文大小写字母、阿拉伯数字、标点符号、

控制符控制符– 77 位编码位编码– 是后来各种字符集、编码的兼容性参考是后来各种字符集、编码的兼容性参考

Page 9: Unicode 和多语言信息处理

常见字符集和编码-续常见字符集和编码-续ISO-8859ISO-8859– 扩充了扩充了 ASCIIASCII ,加入欧洲语言的字母和符号,加入欧洲语言的字母和符号– 88 位编码,扩充部分在位编码,扩充部分在 b7=1b7=1 的区域,避开控制的区域,避开控制

符,与符,与 ASCIIASCII 兼容兼容– 分为多个扩展集,适应不同文字分为多个扩展集,适应不同文字

ISO-8859-1 ISO-8859-1 西欧西欧ISO-8859-5 ISO-8859-5 西里尔语西里尔语ISO-8859-7 ISO-8859-7 希腊语希腊语ISO-8859-15 ISO-8859-15 增加欧元符号增加欧元符号…………

Page 10: Unicode 和多语言信息处理

常见字符集和编码-续常见字符集和编码-续亚洲语言的字符集亚洲语言的字符集– 中国大陆:中国大陆: GBGB 系列系列– 中国台湾:中国台湾: CNSCNS 、、 Big5Big5– 日本:日本: JIS XJIS X– 韩国:韩国: KSCKSC– 大字符集:大字符集: CCCIICCCII 、、 ANSI Z39.64ANSI Z39.64 、、 ISO 10646ISO 10646

亚洲语言的编码系统亚洲语言的编码系统– ISO-2022 ISO-2022 多七位编码多七位编码– EUC EUC 多八位编码多八位编码– 双字节编码:双字节编码: Shift JISShift JIS 、、 GBKGBK 、、 Big5Big5– UnicodeUnicode 类编码类编码– 其它:其它: HZ-GB-2312HZ-GB-2312 、、 GB18030GB18030 、、 TRONTRON 、、 ANSI Z39.64ANSI Z39.64 等等

Page 11: Unicode 和多语言信息处理

Unicode TechnologyUnicode Technology

UnicodeUnicode 是什么?是什么?Unicode provides a unique number for every Unicode provides a unique number for every

character,character,no matter what the platform,no matter what the platform,no matter what the program,no matter what the program,no matter what the language.no matter what the language.

关于字符集、编码的一系列相关标准和处关于字符集、编码的一系列相关标准和处理技术的总和理技术的总和

Page 12: Unicode 和多语言信息处理

Unicode TechnologyUnicode Technology -续-续UnicodeUnicode 的起源与发展的起源与发展– 发起者:发起者: XeroxXerox 、、 AppleApple 、、 IBMIBM 、、 MicrosoftMicrosoft 、、 SunSun 、、

DECDEC 、、 NovellNovell 等等– UnicodeUnicode 与与 ISO-10646ISO-10646 的竞争的竞争

ISO 10646ISO 10646 :: 44 个个 88 位元定长,避开控制区位元定长,避开控制区 C0C0 和和 C1C1 ,不要,不要求求 b7b7 都为都为 00 或或 11UnicodeUnicode :直接使用:直接使用 1616 位元,不避位元,不避 C0C0 和和 C1C1

– UnicodeUnicode 与与 ISO-10646ISO-10646 的统一的统一ISO 10646ISO 10646 放弃避开控制区的方式放弃避开控制区的方式UnicodeUnicode 并入并入 ISO 10646ISO 10646 的字面的字面 00 ,使用多八位元表示,使用多八位元表示

– UnicodeUnicode版本在不断更新版本在不断更新增加新的字符,修正错误增加新的字符,修正错误

Page 13: Unicode 和多语言信息处理

Unicode TechnologyUnicode Technology -续-续字符索引值的结构字符索引值的结构– 0ggggggg pppppppp rrrrrrrr cccccccc0ggggggg pppppppp rrrrrrrr cccccccc

– bb3131固定为固定为 00

– 77 位群位群 (group)(group) 索引,索引, 88 位面位面 (plane)(plane) 索引,索引, 88位行位行 (row)(row)索引,索引, 88 位格位格 (cell)(cell) 索引索引

– 每个面的每个面的 0xFFFE0xFFFE 和和 0xFFFF0xFFFF 值保留值保留– 总共可收录的字数为总共可收录的字数为 128×256×(256×256-128×256×(256×256-

2)=2,147,418,1122)=2,147,418,112 个个

Page 14: Unicode 和多语言信息处理

Unicode TechnologyUnicode Technology -续-续UnicodeUnicode 的字符集的字符集– UCS: Universal Multiple-Octet Coded UCS: Universal Multiple-Octet Coded

Character SetCharacter Set– BMP: Basic Multilingual PlaneBMP: Basic Multilingual Plane 即即 Plane 0Plane 0– UCS-2UCS-2

BMPBMP 的字符集的字符集相当于早期的相当于早期的 UnicodeUnicode

Page 15: Unicode 和多语言信息处理

Unicode TechnologyUnicode Technology -续-续Unicode BMPUnicode BMP 字符子集字符子集– 0000~007F: ASCII0000~007F: ASCII– 0080~00A0: C10080~00A0: C1 控制码控制码– 00A1~1FFF: 00A1~1FFF: 拼音文字拼音文字– 2000~28FF: 2000~28FF: 符号符号– 2E80~33FF: 2E80~33FF: 中日韩符号中日韩符号

(部首、注音符号、日文假(部首、注音符号、日文假名、带括号数字等)名、带括号数字等)

– 3400~4DFF: 3400~4DFF: 中日韩表意文中日韩表意文字扩充区字扩充区

– 4E00~9FFF: 4E00~9FFF: 中日韩表意文中日韩表意文字主区(字主区( 2090220902 个汉字)个汉字)

– A000~A4FF: A000~A4FF: 彝族文字彝族文字

– AC00~D7FF: AC00~D7FF: 韩文拼音组合韩文拼音组合字字

– D800~DFFF: D800~DFFF: 代用对,专用代用对,专用于于 UTF-16UTF-16

– E000~F8FF: E000~F8FF: 私有区,用于私有区,用于自造字自造字

– F900~FAFF: F900~FAFF: 中日韩兼容表中日韩兼容表意文字区意文字区

– FB00~FFFD: FB00~FFFD: 文字表现形式文字表现形式区(竖排标点、全角字符区(竖排标点、全角字符等)等)

BMPBMP 外的字符子集外的字符子集– Plane1: Plane1: 其它非表意文字其它非表意文字– Plane2: Plane2: 中日韩扩充文字和中日韩扩充文字和

CNS11643CNS11643 兼容字兼容字

Page 16: Unicode 和多语言信息处理

Unicode TechnologyUnicode Technology -续-续UnicodeUnicode 的编码方式的编码方式– Unicode Transformation FormatUnicode Transformation Format

目的目的 : : 效率、兼容性效率、兼容性– UTF-32UTF-32

直接用一个直接用一个 3232 位元表示一个位元表示一个 UCSUCS 字符字符– UTF-16UTF-16

用用 1~21~2 个个 1616 位元表示一个位元表示一个 UCSUCS 字符字符BMPBMP 字符为字符为 11 个个 1616 位元,其它面字符用代用对位元,其它面字符用代用对

– UTF-8UTF-8用用 1~41~4 个个 88 位元表示一个位元表示一个 UCSUCS 字符,理论上是字符,理论上是 66 个个ASCIIASCII 为为 11 个个 88 位元,大部分拼音文字用位元,大部分拼音文字用 22 个个 88 位元,表意文位元,表意文字用字用 33 个个 88 位元,位元, BMPBMP之外的面用之外的面用 44 个个 88 位元位元JavaJava 里的里的 UTF-8UTF-8 可能出现可能出现 66 个个 88 位元,是历史原因,目前已位元,是历史原因,目前已定义的定义的 UnicodeUnicode 字符至多用到字符至多用到 44 个个

Page 17: Unicode 和多语言信息处理

Unicode TechnologyUnicode Technology -续-续UTF-8UTF-8 的编码规则的编码规则

UnicodeUnicode 范围范围 UTF-8UTF-8 编码编码00000000~0000007F00000000~0000007F 00xxxxxxxxxxxxxx

00000080~000007FF00000080~000007FF 110110xxxxxxyyyy 1010yyyyyyyyyyyy

00000800~0000FFFF00000800~0000FFFF 11101110xxxxxxxx 1010xxxxxxxxyyyy 1010yyyyyyyyyyyy

00010000~001FFFFF00010000~001FFFFF 1111011110xxxxxx 1010xxxxyyyyyyyy 1010yyyyyyyyzzzz 1010zzzzzzzzzzzz

Page 18: Unicode 和多语言信息处理

Unicode TechnologyUnicode Technology -续-续字节序字节序– 用多八位元表示用多八位元表示 1616 位或位或 3232 位整数位整数– Big-endianBig-endian 、、 Little-endianLittle-endian– 字节顺序标记字节顺序标记

数值数值 : FEFF: FEFF

UTF-16BE: FE FFUTF-16BE: FE FF

UTF-16LE: FF FEUTF-16LE: FF FE

UTF-8: EF BB BFUTF-8: EF BB BF

Page 19: Unicode 和多语言信息处理

开发支持开发支持 UnicodeUnicode 的程序的程序操作系统和运行时库的操作系统和运行时库的 UnicodeUnicode 支持支持– Windows NT FamilyWindows NT Family 的的 Win32Win32 子系统子系统

内部全面支持内部全面支持 UnicodeUnicode ,内核、设备驱动、文件系,内核、设备驱动、文件系统接口都使用统接口都使用 UnicodeUnicode

User level APIUser level API 全面支持全面支持 UnicodeUnicode ,同时提供非,同时提供非UnicodeUnicode 的的 APIAPI 兼容兼容 1616 位位 WindowsWindows下的源代码下的源代码UnicodeUnicode 文本使用文本使用 UTF-16UTF-16 编码编码Unicode IMEUnicode IME :码表、微软输入法、拼音加加:码表、微软输入法、拼音加加 3.13.1

Windows 9XWindows 9X 的的 Unicode APIUnicode API只提供了入口,内部只提供了入口,内部没有实现,调用则返回错误代码没有实现,调用则返回错误代码

Page 20: Unicode 和多语言信息处理

开发支持开发支持 UnicodeUnicode 的程序-续的程序-续操作系统和运行时库的操作系统和运行时库的 UnicodeUnicode 支持-续支持-续– 开放系统开放系统

各类各类 UnixUnix 系统的系统的 syscallsyscall 、、 vfsvfs 等涉及文本的地方等涉及文本的地方都是都是 char*char* ,因此最好的折中方式是,因此最好的折中方式是 UTF-8UTF-8glibcglibc 的的 wide charwide char 是是 UTF-32UTF-32 编码,但只适用于编码,但只适用于GNUGNU 系统;其它系统的系统;其它系统的 libclibc未必如此未必如此XFree86/XorgXFree86/Xorg 在保留复杂的在保留复杂的 X11X11 复合文本的同时复合文本的同时引入引入 Xutf8Xutf8 系列系列 APIAPI 支持支持 UnicodeUnicodegnomegnome 使用使用 UTF-8UTF-8 作为内部编码,作为内部编码, KDEKDE 通过通过QStringQString 支持支持 UnicodeUnicodescimscim输入平台全面支持输入平台全面支持 UnicodeUnicode

Page 21: Unicode 和多语言信息处理

开发支持开发支持 UnicodeUnicode 的程序-续的程序-续WindowsWindows 的双模的双模 APIAPI– 文档中的原型文档中的原型BOOL SetWindowText(HWND hWnd, LPCTSTR lpString);BOOL SetWindowText(HWND hWnd, LPCTSTR lpString);

– 实际原型实际原型BOOL SetWindowTextA(HWND hWnd, LPCSTR lpString);BOOL SetWindowTextA(HWND hWnd, LPCSTR lpString);

BOOL SetWindowTextW(HWND hWnd, LPCWSTR lpString);BOOL SetWindowTextW(HWND hWnd, LPCWSTR lpString);

#ifdef UNICODE#ifdef UNICODE

#define SetWindowText SetWindowTextW#define SetWindowText SetWindowTextW

#else#else

#define SetWindowText SetWindowTextA#define SetWindowText SetWindowTextA

#endif#endif

Page 22: Unicode 和多语言信息处理

开发支持开发支持 UnicodeUnicode 的程序-续的程序-续用用 MSLUMSLU 开发支持开发支持 UnicodeUnicode 的软件的软件– 原理原理

在在 NTNT上直接调用上直接调用 -W API-W API在在 9X9X上截取上截取 -W-W 系列系列 APIAPI 的调用转为的调用转为 -A-A 系列系列 APIAPI

– 好处与局限性好处与局限性在在 NTNT上不损失任何功能和性能,在上不损失任何功能和性能,在 9X9X上正常运行上正常运行支持的支持的 APIAPI 不够完整,有些需要自己重载不够完整,有些需要自己重载并不能给并不能给 9X9X带来支持带来支持 UnicodeUnicode 的能力的能力出现太晚,大多数第三方软件开发商不支持出现太晚,大多数第三方软件开发商不支持

– 其它选择其它选择双版本可执行程序双版本可执行程序自己写自适应层自己写自适应层

Page 23: Unicode 和多语言信息处理

开发支持开发支持 UnicodeUnicode 的程序-续的程序-续编程语言编程语言 // 开发环境对开发环境对 UnicodeUnicode 的支持的支持– CC 和和 C++C++

wide charwide char 并不保证字符集和编码方式并不保证字符集和编码方式ISO C99ISO C99 提供了可选的提供了可选的 ISO10646ISO10646 支持支持必要时可借助必要时可借助 IBMIBM 的的 ICUICU

– JavaJava从一开始设计就支持从一开始设计就支持 UnicodeUnicode早期早期 UCS-2UCS-2 ,后来通过,后来通过 UTF-16UTF-16 全面支持全面支持

– DelphiDelphi以兼容性为借口不在以兼容性为借口不在 VCLVCL 中支持中支持 UnicodeUnicodeTntTWare Delphi Unicode ControlsTntTWare Delphi Unicode Controls

– 开源社区的脚本语言开源社区的脚本语言积极支持积极支持 UnicodeUnicode

Page 24: Unicode 和多语言信息处理

开发支持开发支持 UnicodeUnicode 的程序-续的程序-续InternetInternet 与与 UnicodeUnicode– HTMLHTML 用用 UnicodeUnicode 作为字符集作为字符集– EmailEmail 信头和信体的编码设定信头和信体的编码设定– IMAPIMAP协议用变种协议用变种 UTF-7UTF-7传送邮件夹名称传送邮件夹名称– LDAPv3LDAPv3 使用使用 UTF-8UTF-8传送文本传送文本– SFTPSFTP 使用使用 UTF-8UTF-8传送文件名传送文件名– 多语种域名解析系统多语种域名解析系统– IETFIETF建议以后新发明的协议和建议以后新发明的协议和 URIURI 表示法都表示法都

支持支持 UTF-8UTF-8

Page 25: Unicode 和多语言信息处理

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