Your SlideShare is downloading. ×
0
字符集与编码
字符集与编码
字符集与编码
字符集与编码
字符集与编码
字符集与编码
字符集与编码
字符集与编码
字符集与编码
字符集与编码
字符集与编码
字符集与编码
字符集与编码
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

字符集与编码

1,282

Published on

dddd

dddd

1 Comment
2 Likes
Statistics
Notes
  • Hi dear Lilizhang,
    Thank you for taking the time to view my show.
    Best regards..Have a nice weekend.
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
No Downloads
Views
Total Views
1,282
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
10
Comments
1
Likes
2
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. 字符集与编码 张磊 2010-02
  • 2. 字符与字符集 <ul><li>character( 字符 ) :视觉上而言是 glyph </li></ul><ul><li>人眼通过视觉识别字符,计算机通过 bit stream 识别信息 </li></ul><ul><li>字符集 (character set) 表示的是某数字与某字符之间的对应关系 ( 一一对应的全函数 ) </li></ul><ul><li>ASCII(American Standard Code for Information Interchange) ,将 0~127 对应到 52 个英文字母, 10 个阿拉伯数字,标点… </li></ul>
  • 3. 编码 <ul><li>字符集:字符↔数字 </li></ul><ul><li>编码:限定了字符集中每个数字的存储空间与位顺序 </li></ul><ul><ul><li>octet( 严格定义 ) 与 byte( 与 CPU 及字符有关 ) </li></ul></ul><ul><ul><li>字节序: little-endian 与 big-endian(htonl/ntohl) </li></ul></ul><ul><ul><li>变长存储与定长存储 </li></ul></ul><ul><li>常见的编码 </li></ul><ul><ul><li>单字节: ASCII/ISO-8859-1 </li></ul></ul><ul><ul><li>双字节: GB2312/UTF-16 </li></ul></ul><ul><ul><li>变字节: UTF-8/UTF-7 </li></ul></ul>
  • 4. 文字的显示过程 <ul><li>获得比特流的字符集与编码 </li></ul><ul><ul><li>HTML : content-type </li></ul></ul><ul><ul><li>文本文件:操作系统默认 /BOM </li></ul></ul><ul><ul><li>代码文件:编辑器默认 / 代码中指定 </li></ul></ul><ul><ul><li>固定编码: form 提交 </li></ul></ul><ul><li>按照字符集与编码规则顺序读出单个字符 ( 的数字 ) </li></ul><ul><li>获取显示设置的字体 / 字色 / 大小 / 背景 / 间距…渲染出字符 </li></ul>
  • 5. 乱码问题 <ul><li>发收方字符集 / 编码不匹配 </li></ul><ul><ul><li>Form 提交 </li></ul></ul><ul><ul><li>HTML 没有设定 content-type ,猜测… </li></ul></ul><ul><ul><li>XML 没有使用 UTF8/UTF16 编码,猜测… </li></ul></ul><ul><li>数据必须要与软件匹配 </li></ul><ul><li>C 语言的 char/int/byte 混用,如类型自由转换,空字符表示字符串的结尾, strlen… </li></ul>
  • 6. 常见编码 <ul><li>ASCII </li></ul><ul><li>ASCII 的扩展 (DBCS, MBCS) </li></ul><ul><ul><li>ISO-8859-1 </li></ul></ul><ul><ul><li>GB2312 :常见汉字与符号,一级汉字拼音序 </li></ul></ul><ul><ul><li>GBK :繁体字 </li></ul></ul><ul><ul><li>GB18030 :少数民族字符 </li></ul></ul><ul><ul><li>BIG5 </li></ul></ul><ul><li>兼容 ASCII 引入的问题 </li></ul><ul><ul><li>抢占 ASCII 高位带来字符集冲突 -&gt; 代码页 </li></ul></ul><ul><ul><li>兼容性 -&gt; 如何分割字符 </li></ul></ul>
  • 7. Unicode <ul><li>字符集: Unicode </li></ul><ul><li>编码: </li></ul><ul><ul><li>UCS-4 : group/plane/row/cell </li></ul></ul><ul><ul><li>UCS-2/BMP(Basic Multilingual Plane) </li></ul></ul><ul><ul><li>UTF-16 </li></ul></ul><ul><ul><li>UTF-8 </li></ul></ul>UCS-2 编码 (16 进制 ) UTF-8 字节流 ( 二进制 ) 0000 - 007F 0xxxxxxx 0080 - 07FF 110xxxxx 10xxxxxx 0800 - FFFF 1110xxxx 10xxxxxx 10xxxxxx
  • 8. Unicode- 续 <ul><li>字节序: BOM(Byte Order Mark) </li></ul><ul><ul><li>FEFF : Big-endian </li></ul></ul><ul><ul><li>FFFE : Little-endian </li></ul></ul><ul><ul><li>EF BB BF : UTF-8 </li></ul></ul><ul><li>记事本示例:中 (GB : D6D0 , U : 4E2D) </li></ul><ul><ul><li>ANSI( 默认 ) : 2 字节, D6D0 </li></ul></ul><ul><ul><li>Unicode : 4 字节, FFFE2D4E </li></ul></ul><ul><ul><li>Unicode Big Endian : 4 字节, FEFF4E2D </li></ul></ul><ul><ul><li>UTF8 : 6 字节, EFBBBF E4B8AD </li></ul></ul>
  • 9. 编码的编码 <ul><li>格式的扩展 (2 进制数据与未来字符 ) 与保留字符: </li></ul><ul><ul><li>一般用来处理 ASCII 中的非字母与非数字字符 </li></ul></ul><ul><ul><li>Form 提交 (get/post) : application/x-www-form-urlencoded </li></ul></ul><ul><ul><li>URL 编码: RFC 1738 </li></ul></ul><ul><ul><li>BASE64… </li></ul></ul><ul><li>浏览器 URL 编码设置 </li></ul>
  • 10. 编码的编码 - 续 <ul><li>顺序 </li></ul><ul><ul><li>原字符编码规则下的 16 进制数字 </li></ul></ul><ul><ul><li>划分为 octet(nibble) ,加上 % 发送 </li></ul></ul><ul><li>示例:中 (GB : D6D0 , U : 4E2D) </li></ul><ul><ul><li>GB2312 再编码: %D6%D0 http://www.baidu.com/s?wd= %D6%D0 &amp;tn=16site_pg </li></ul></ul><ul><ul><li>UTF8 再编码: %E4%B8%AD http://www.baidu.com/s?wd= %E4%B8%AD &amp;&amp;tn=16site_pg &amp;ie=utf-8 </li></ul></ul>
  • 11. 常见的软件问题 <ul><li>服务器端 </li></ul><ul><ul><li>PHP 编码支持 </li></ul></ul><ul><ul><li>strXXX/mbXXX/iconv </li></ul></ul><ul><ul><li>urlencode/urldecode/rawurlencode… ( 环境相关 ) </li></ul></ul><ul><li>页面 </li></ul><ul><ul><li>BOM </li></ul></ul><ul><ul><li>content-type </li></ul></ul><ul><ul><li>encodeURIComponent/encodeURI/escape ( 环境无关 )… </li></ul></ul>
  • 12. 常见的软件问题 - 续 <ul><li>C 语言 </li></ul><ul><ul><li>宽字符,不可随意进行 char/int/byte 混合转化 </li></ul></ul><ul><ul><li>iconv(Linux) </li></ul></ul><ul><ul><li>MultiByteToWideChar/WideCharToMultiByte(Windows) </li></ul></ul><ul><li>js 主要的问题:没有通用的 gb 编码函数 </li></ul><ul><ul><li>IE :用 vbscript 转化 </li></ul></ul><ul><ul><li>非 IE : Flash/form 的 accept-charset </li></ul></ul><ul><ul><li>用服务器中转 </li></ul></ul>
  • 13. 讨论

×