字符集字符编码学习

时间:2023-01-10 22:31:55

字符集字符编码学习 

字符编码这块的知识很重要,从刚入行时的ASCII到现在的Unicode,遇到过很多字符集乱码情况,也都似懂非懂的解决了,但对这些似懂非懂模棱两可的事情总会在心里犯嘀咕,最近终于有时间可以将这块内容好好理一下。 

计算机中的字符编码的基本原理就是映射,将给定的字节序依据指定的字符集进行映射输出字符集映射的结果,根据既定的规则完成字节序到特定字符集的映射。 

 

ASCII 

ASCII字符集的范围,00000000~01111111(0x00~0x7F)0~127 

ASCII字符集被分成4组,每组32个字符组成。 

第一组,00000000~0001 1111(0x00~0x1F),控制字符 

第二组,00100000~0011 1111(0x20~0x3F),符号、标点、数字 

第三组,01000000~0101 1111(0x40~0x5F),符号、大写字母 

第四组,01100000~0111 1111(0x60~0x7F),符号、小写字母 

(图示1) 

字符集字符编码学习

 

(代码1_打印ASII字符集内容_二进制格式) 

 

ISO8859-1 

ISO8859-1ASCII为基础,在空置的0xA0~0xFF增加了96个字符,供附加符号与拉丁字母语言使用。 

字符集范围 

0000 0000~0111 1111(0x00~0x7F):标准ASCII字符集 

0100 0000~0101 1111(0x80~0x9F):在此字符集下未定义 

1010 0000~1111 1111(0xA0~0xFF)ISO8859-1添加的96个字符 

ISO/IEC 2022

主要概念

字符集范围

0000 0000~0001 1111(0x00~0x1F):保留给控制字符

0010 0000~01111111(0x20~0x7F):表示图形字符,除去(0x200x7F分别表示空格与Del)两字符后共94个字符。

所以对于双字节的7位编码空间,图形字符可以有94*94=8836

ISO2022约定字符集分块(针对7位编码)

控制字符分为两块:

  • C00000 0000 ~ 0001 1111 (0x00~0x1F)
  • C1

打印(图形)字符分四块:

0010 0000~01111 1111(0x20~0x7F)用于G0G1G2G3字符块。

  • G0
  • G1
  • G2
  • G3

对于单字节编码的字符集,1个打印(图形)字符块可包含9496个字符;对于双字节编码的字符集,1个打印(图形)字符块可包含94*94个字符。使用控制符的转义序列来表示在G0G1G2G3之间切换。

ISO2022约定字符集分块(针对8位编码)

8位编码字符集兼容7位编码字符集

控制字符分为两块:

  • C0/CL区,0000 0000 ~ 0001 1111 (0x00~0x1F)
  • C1/CR区,1000 0000 ~ 1001 1111 (0x80~0x9F)

打印(图形)字符分四块:

  • G0/GL区,0010 0000 ~ 0111 1111 (0x20~0x7F)
  • G1G2G3/GR区,1010 0000 ~ 1111 1111 (0xA0~0xFF)

 

EUC(Extended Unix Code)

使用8位编码表示字符的标准化方法,主要用于表示及存储文字编码。

EUC基于ISO/IEC 20227位编码标准,单字节编码空间为94,双字节编码空间(区位码)为94*94,约定每个区位加上1010 0000(0xA0)用以兼容ISO 2022编码标准。

EUC定义的4个单独的码集:

  • 码集0,对应7位依ASCII码为基础的字符集标准,包含ISO2022约定的C0G0空间的值,范围:
    • 0x00~0x7F(0000 0000 ~ 0111 1111)
  • 码集123,对应ISO2022约定的G1空间,其中
    • 码集1,表示一些未经修饰的字符
    • 码集20x8E(1000 1110)为第一字节,属于C1控制字符
    • 码集30x8F(1000 1111)为第一字节,属于C1控制字符
  • 码集0总是单字节编码,码集1编码为1~3字节,码集23编码为至少2字节

 

GB2312

标准简体中文字符集,8位双字节编码。共收录6763个汉字,其中一级汉字3755个,二级汉字3008个,同时收录拉丁字母及其它字母682个字符。

GB2312分区

  • 01-09区为符号、数字区
  • 16-55区为一级汉字(按拼音排序)
  • 56-87区为二级汉字(按部首/笔画排序)
  • 10~15区、88~94区未使用

GB2312字节结构

GB2312是单、双字节混合结构

  • 字节值在0x00~0x7F为单子节表示一个字符,构成C0G0区,与ASCII兼容。

汉字及符号以两个字节表示

  • 第一个字节(高字节),0xA1~0xF7(01~87区的区号加上0xA0)
  • 第二个字节(低字节),0xA1~0xFE(01~94区的区号加上0xA0)
  • 因为汉字字符从16区开始,所以汉字区高字节的范围是:0xB0~0xF70xB0+16),低字节的范围不变0xA1~0xFE

GB2312字符集范围

  • ASCII兼容(0x00~0x7F
  • 中文汉字符号(0xA1A1~0xF7FE

Java输出GB2312字符集内容(代码)


相关资料