Unicode和多语言信息处理.ppt

举报
资源描述
Unicode和多语言信息处理,,内容,早期的本地化技术 软件国际化和多语言信息处理的需求 常见字符集、编码介绍 Unicode Technology 简介 开发支持Unicode的程序 Internet 时代的多语言信息处理 相关资源 不涉及文字消息(界面)本地化,早期的本地化技术,问题的历史起因 电子计算机源起于英美,较少考虑国际需求 早期不面向普通用户,无交互 早期的本地化努力 互相独立缺乏沟通合作 逆向工程、外挂,支持不彻底 应用软件要做个例修改,缺乏复用 早期汉化的重要成果:GB2312 标准,基于国际化的本地化,抽象出共同部分做成框架,应用程序接口,国际化核心功能,本地化数据定义接口,英文定义,俄文定义,中文定义,……,文字处理,数据库,多媒体,……,基于国际化的本地化-续,成果 抽象框架,功能复用,简化开发过程 可加载的本地化模块,易于扩展 宽字符机制,避开多字节编码的字节边界 缺陷 编码空间不兼容,导致“乱码” 即使使用宽字符,不同语言的文字也无法共同处理,乱码一例,GBK Byte1 : [0x81, 0xFE] Byte2 : [0x40, 0xFE] Latin-1 Single byte : [0xA0, 0xFF] 序列 0xF1,0x61 如何解释? 在GBK里是馻 在Latin-1里是ña,馻,ña,多语言需求的解决方法,问题:字符集太小 解决:设计大字符集并预留扩充位 问题:编码空间冲突 解决:设计新的编码方式 有状态编码,使用转义序列 局部兼容性,编程复杂 无状态编码,为每个编码点保留唯一编码值 需要码表转换,编程简单,常见字符集和编码,ASCII American Standard Code for Information Interchange 起源于美国国会图书馆 等同于 ISO 646 包含英文大小写字母、阿拉伯数字、标点符号、控制符 7位编码 是后来各种字符集、编码的兼容性参考,常见字符集和编码-续,ISO-8859 扩充了ASCII,加入欧洲语言的字母和符号 8位编码,扩充部分在b7=1的区域,避开控制符,与ASCII兼容 分为多个扩展集,适应不同文字 ISO-8859-1 西欧 ISO-8859-5 西里尔语 ISO-8859-7 希腊语 ISO-8859-15 增加欧元符号 ……,常见字符集和编码-续,亚洲语言的字符集 中国大陆: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等,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. 关于字符集、编码的一系列相关标准和处理技术的总和,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版本在不断更新 增加新的字符,修正错误,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个,Unicode Technology-续,Unicode的字符集 UCS: Universal Multiple-Octet Coded Character Set BMP: Basic Multilingual Plane即Plane 0 UCS-2 BMP的字符集 相当于早期的Unicode,Unicode Technology-续,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-续,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个,Unicode Technology-续,UTF-8的编码规则,Unicode Technology-续,字节序 用多八位元表示16位或32位整数 Big-endian、Little-endian 字节顺序标记 数值: FEFF UTF-16BE: FE FF UTF-16LE: FF FE UTF-8: EF BB BF,开发支持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只提供了入口,内部没有实现,调用则返回错误代码,开发支持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,开发支持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,开发支持Unicode的程序-续,用MSLU开发支持Unicode的软件 原理 在NT上直接调用-W API 在9X上截取-W系列API的调用转为-A系列API 好处与局限性 在NT上不损失任何功能和性能,在9X上正常运行 支持的API不够完整,有些需要自己重载 并不能给9X带来支持Unicode的能力 出现太晚,大多数第三方软件开发商不支持 其它选择 双版本可执行程序 自己写自适应层,开发支持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,开发支持Unicode的程序-续,Internet与Unicode HTML用Unicode作为字符集 Email信头和信体的编码设定 IMAP协议用变种UTF-7传送邮件夹名称 LDAPv3使用UTF-8传送文本 SFTP使用UTF-8传送文件名 多语种域名解析系统 IETF建议以后新发明的协议和URI表示法都支持UTF-8,相关资源,乱码大全 - 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,
展开阅读全文
相关搜索
温馨提示:
文客久久所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。

当前位置:首页 > 重点行业资料库 > 1


Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。