<文档>格式良好文档>Unicode:FF FE 3C 00 87 65 63 68 3E 00 3C 68 0F 5F 6F 827D 59 3C 00 2F 00 87 65 63 68 3E 00Unicode big endian:FE FF 00 3C 65 87 68 63 00 3E 68 3C 5F 0F 82 6F59 7D 00 3C 00 2F 65 87 68 63 00 3EUTF-8:EF BB BF 3C E6 96 87 E6 A1 A3 3E E6 A0 BC E5 BC8F E8 89 AF E5 A5 BD 3C 2F E6 96 87 E6 A1 A3 3EANSI:3C CE C4 B5 B5 3E B8 F1 CA BD C1 BC BA C3 3C 2FCE C4 B5 B5 3E“<”的Unicode编码是:003C“文”的Unicode编码是:6587“档”的Unicode编码是:6863“>”的Unicode编码是:003E“格”的Unicode编码是:683C什么是UTF-8?UCS规定了怎么用多个字节表示各种文字。怎样转换这些编码,是由UTF(UCS Transformation Format)规范规定的,常见的UTF规范包括UTF-8、UTF-7、UTF-16。8位形式的UCS转换格式(Unicode Transformation Format -8,UTF-8)对于每个Unicode 字符,UTF-8 用可变数目的字节来对该字符进行编码。对于较低的127 个ASCII 字符,此编码进行了优化,从而产生了一种能够以国际化的方式对英语进行编码的高效机制。9山东师范大学信息学院研究生课程2008年10月25日星期六UTF-8网站11山东师范大学信息学院研究生课程2008年10月25日星期六Unicode面临的问题既然如此,如果说Unicode 解决了跨平台的字符编码问题,那为何它却未成为唯一的标准呢?第一个问题是,转换到Unicode 有时意味着使所有的文件大小加倍——这样做在网络世界中是不可想象的。因此有人仍乐于使用老的、单字节的字符集,如ISO-8859-1 到ISO-8859-15、Shift-JIS、EUC-KR 等等。第二个问题是,仍存在许多并非基于Unicode 的系统,这就意味着在网络上,某些组成Unicode 字符的字节值可能会给那些更旧的系统造成严重问题。因此定义了“Unicode 转换格式(UTF)”;它们运用位转换技术对Unicode 字符进行编码,使其成为在老系统上“透明的”(或可安全通过)的字节值。此类字符编码中最普及的是UTF-8。UTF-8 采用Unicode 标准的前127 个字符(它们恰好是基本的拉丁文字符:A-Z、a-z 和0-9,以及几个标点字符),并直接将其映射到单字节值。然后采用位转换技术,用字节的高位来编码Unicode 字符的其余部分。8山东师范大学信息学院研究生课程2008年10月25日星期六什么是UTF-8?(续)8位形式的UCS转换格式(Unicode Transformation Format -8,UTF-8)UTF-8 是为在ASCII 使用范围之外发展的协议推荐的字符集。UTF-8协议提供了扩展ASCII 字符的和UCS-2转换的支持,UCS-2是支持全球大多数书写系统的16 位Unicode 字符集。与使用ASCII 或扩展ASCII 对字符数据进行编码相比,UTF-8 可获得更大的名称表达范围。运行Windows 2000、Windows XP 和Windows Server 2003 操作系统的计算机支持UTF-8。也就是说,当服务器将UTF-8 编码的字符作为数据来接收或使用时,服务器可在它的区域中加载和存储这些数据。10山东师范大学信息学院研究生课程2008年10月25日星期六UTF-8 编码方式可见:UTF-8编码中:7及以下开头的为ASCII字从UCS-2到UTF-8的编码方式如下:符,由一个字节组成。C及D开头的由两个字节组成。范围模板E开头的由三个字节组成。0000-007F0xxxxxxx0080-07FF110xxxxx10xxxxxx0800-FFFF1110xxxx10xxxxxx 10xxxxxx例如“汉”字的Unicode编码是6C49。6C49在0800-FFFF之间,所以用6C491110xxxx10xxxxxx 10xxxxxx3字节模板:。用模板得到:的二进制是:11100110 10110001 100010010110 110001 001001,,即:E6 B1 8912山东师范大学信息学院研究生课程2008年10月25日星期六2
UTF-8 编码示例:字符Unicode范围模板Utf-8@00400000-007F0xxxxxxx40*002A0000-007F0xxxxxxx2A×00D70080-07FF110xxxxx10xxxxxxC3 97D7→1101 0111→00011 010111→11000011 10010111 →C3 97÷00F70080-07FF110xxxxx10xxxxxxC3 B7F7→1111 0111→00011 110111→11000011 10110111 →C3 B7①24600800-FFFF1110xxxx10xxxxxx 10xxxxxxE2 91 A02460→10 0100 0110 0000→0010 010001 100000→11100010 10010001 10100000→E2 91 A0CJK汉字的连续范围在:4e00至9fa5,所以皆用3字节模板13山东师范大学信息学院研究生课程2008年10月25日星期六UTF-8字节顺序标记Unicode 字节顺序标记(十六进制0xFEFF),它在UTF-8 中表示为十六进制0xEF0xBB 0xBF。字节顺序标记用于将UTF-8 文本与其他编码区分开来。15山东师范大学信息学院研究生课程2008年10月25日星期六UTF-8 编码特点:•UCS 字符U+0000 到U+007F (ASCII) 被编码为字节0x00 到0x7F (ASCII 兼容)。这意味着只包含7 位ASCII 字符的文件在ASCII 和UTF-8 两种编码方式下是一样的。•所有>U+007F 的UCS 字符被编码为一个多个字节的串, 每个字节都有标记位集。因此, ASCII 字节(0x00-0x7F) 不可能作为任何其他字符的一部分。•表示非ASCII 字符的多字节串的第一个字节总是在0xC0 到0xFD的范围里, 并指出这个字符包含多少个字节。多字节串的其余字节都在0x80 到0xBF范围里。这使得重新同步非常容易, 并使编码无国界, 且很少受丢失字节的影响。•可以编入所有可能的231个UCS 代码•UTF-8 编码字符理论上可以最多到6 个字节长, 然而16 位BMP 字符最多只用到3 字节长。1993 年之后开发的大多数现代编程语言都有一个特别的数据类型, 叫做Unicode/ISO 10646-1 山东师范大学信息学院研究生课程字符。在Ada95 中叫Wide_Character, 2008年10月25在日星期六Java和C#中叫char.17UTF-8 编码示例(续)Unicode字节顺序标记0xFEFF FEFF 1110xxxx10xxxxxx 10xxxxxx→→1111 1110 1111 11111111 111011 111111→11101111 10111011 10111111→EF BB BF文档格式良好GBCEC4B5B5B8F1CABDC1BCBAC3Unicode65876863683C5F0F826F597DUTF-8E6 96 87E6 A1 A3E6 A0 BCE5 BC 8FE8 89 AFE5 A5 BD14山东师范大学信息学院研究生课程2008年10月25日星期六UTF-8 编码方式在多字节串中, 第从UCS-4到UTF-8的编码方式如下:一个字节的开头U-00000000-U-0000007F:0xxxxxxx\"1\"的数目就是整个串中字节的数目U-00000080-U-000007FF:110xxxxx10xxxxxx U-00000800-U-0000FFFF:1110xxxx10xxxxxx 10xxxxxx U-00010000-U-001FFFFF:11110xxx 10xxxxxx 10xxxxxx 10xxxxxx U-00200000-U-03FFFFFF:111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx U-04000000-U-7FFFFFFF:1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 在UTF-8 之前, 不同地区的用户使用各种各样的ASCII 扩展. 最普遍的欧洲编码是ISO 8859-1 和ISO 8859-2, 希腊编码ISO 8859-7, 俄国编码KOI-8, 日本编码EUC 和Shift-JIS, 等等. 这使得文件的交换非常困难, 且应用软件必须特别关心这些编码的不同之处。最终, Unicode 将取代所有这些编码, 主要通过UTF-8 的形式.16山东师范大学信息学院研究生课程2008年10月25日星期六UTF-8(续)•UTF-8和UTF-16这两种对Unicode字符编码的规范•UTF-8中,属于US-ASCII中的字符,仍用一个字节表示,且和US-ASCII兼容,编码其他的字符,则用1(大于0x7F部分)到3个字节。•UTF-8的变长性和复杂性,对非ASCII的字符,就不大友好了,也开始违背了Unicode的初衷。•例如: Unicode 字符U+00A9 = 1010 1001 (版权符号) 在UTF-8 里的编码为:11000010 10101001 = 0xC2 0xA9•而字符U+2260 = 0010 00100110 0000 (不等于) 编码为:11100010 10001001 10100000 = 0xE2 0x89 0xA018山东师范大学信息学院研究生课程2008年10月25日星期六3
小结记事本文档的四种编码方式:Standards InstituteANSI:系统预设的标准文字储存格式。的缩写。它成立于1918ANSI年,是一个自愿性的组织,拥有超过是American National 1300个会员,包括所有大型的电脑公司。ANSI专为电脑工业建立标准,它是世界上相当重要的标准。Unicode:世界上所有主要指令文件的联集,包括商业和个人电脑所使用的公用字集。当采用Unicode格式储存文件时,可使用Unicode控制字符辅助说明语言的文字覆盖范围,如阿拉伯语、希伯来语。用户在“记事本”中输入含有Unicode字符的文字并储存文件时,系统会提示你必须选取“另存为”中的Unicode编码,这些字符才不会被遗失。需要提醒大家的是,部分Windows 2000字型无法显示所有的UnicodeUnicode big endian字符。如果发现文件中缺少了某些字符,只需将其变更为其它字型即可。:在Big-endian处理器(如苹果Macintosh电脑)上建立的Unicode文件中的文字位元组(存放单位)排列顺序,与在Intel处理器上建立的文件的文字位元组排列顺序相反。最重要的位元组拥有最低的地址,且会先储存文字中较大的一端。为使这类电脑的用户能够存取你的文件,可选择Unicode big-endianUTF-8格式。:UTF意为通用字集转换格式(Universal Character Set Transformation Format),UTF-8是Unicode的8位元格式。如果使用只能在同类位元组内支持8个位元的重要资料一类的旧式传输媒体,可选择UTF-8格式。19山东师范大学信息学院研究生课程2008年10月25日星期六编程练习题•码,先手工转换成利用字符映射表查出你的姓名中汉字的UTF-8编码,然后用你熟悉的Uincode语言写一个程序实现转换。•标写一个字符各种编码查询,BIG5,日文)GUI程序。(Unicode,UTF8,国•写一个文件内码转换程序。•“写一个记事本“”记事本提供的保存时的编码种类选项。”程序,提供Windows 2000的•简述Unicode 的Surrogate 机制及其应用情况。•Surrogate 查阅资料,了解机制的编程技术。.NET Framework中Unicode 的•常见有什么是代码页?什么是LCID?为什么安装软件时21山东师范大学信息学院研究生课程2052文件夹2008年10?月25日星期六思考题•什么是字符集?在HTML或XML文档中怎样指定字符集?•汉字字符集有哪几种?•什么是Unicode字符集?什么是BMP?•什么是little endian和big endian?•什么是Unicode字节顺序标记,其作用是什么?•什么是UTF-8?简述其编码方式及其编码特点。•XML使用UTF-8作为缺省编码,有何意义?Question & Answer4
因篇幅问题不能全部显示,请点此查看更多更全内容