字符编码(四)ASCII,Unicode,UCS,UTF,字符&&字符编码集

1、理解                                                                                                 

       byte是唯一实现,真实的存在                                                                    

       char,int,short,是各种语义抽象(人,计算机对byte的语义分析,借用编译原理的概念)               

       String,Java由char组成,但最终还是以Bytes形式存在                                                 

                                                                                                        

2、ASCII字符集编码                                                                                      

    7位编码(最高位忽略无效),编码范围是0x00-0x7F。共128个字符(4位二进制==一位16进制)                

              0A  LF (NL line feed, new line) 换行键                                                    

              0D  CR (carriage return)  回车键(运输返回)                                              

              30 0                                                                                      

              41 A                                                                                      

              61  a                                                                                     

              <CR><LF>源自电传打字机Teletype,<CR>打字机把打印头定位在左边界, <LF>打字机把纸向下移一行。

              Unix 每行结尾"\n", Windows每行结尾"\r\n",分歧。                                           

                                                                                                        

3、Unicode(Universal code)                                                                              

       任何文字(char)在中都对应一个值(code point),代码值格式:U+ABCD                                    

       unicode 3.0: ISO/IEC 10646-1, support 49,259 chars, Basic Multilingual Plane(基本多文种平面)     

       Unicode 3.1:ISO/IEC 10646-2, support 94,205 chars, Supplementary Planes(定义的辅助平面)         

       UTF-8(1-4个字节)仅支持unicode3.0, 表示unicode3.0+,需要更多个字节?                               

       中日韩编码范围:4E00-9FBF:CJK 统一表意符号 (CJK Unified Ideographs)                             

                                                                                                        

3.1、UCS(Universal Character Set)                                                                       

       文字(char)和代码点之间的对应关系(抽象),没有规定如何存储(实现)                                   

       UCS-2(UCS coded in 2 octets)代码值范围U+0000~U+FFFF                                             

       UCS-4(UCS coded in 4 octets)代码值范围U+00000000~U+7FFFFFFF                                     

              U+7FFFFFFF = 2^7(最高位为0,group) * 2^8(plane面) * 2^8(row) * 2^8(cell码元)               

              BMP(Basic Multilingual多语言 Plane): group0,plane0 , BMP前2个字节全0,后两个字节对应UCS-2 

                                                                                                        

3.2、UTF(Unicode Transformation Format)                                                                 

       规定code point在计算机中如何存储                                                                 

       BOM: Byte Order Mark, 值:FEFF                                                                   

                                                                                                        

3.3、UFT-8, 用8bit作为最小单元,没有字节序问题,但仍然可以有BOM: EFBBBF                                 

       变长(1-4字节),兼容ASCII                                                                          

                                                                                                        

3.4、UTF-8映射unicode                                                                                   

       Unicode编码(16进制) ║ UTF-8 字节流(二进制)   有效bit数                                      

       000000 - 00007F ║ 0xxxxxxx   7bit//ASCII字母继续使用1字节储存                               

       000080 - 0007FF ║ 110xxxxx 10xxxxxx   11bits//希腊字母                                      

       000800 - 00FFFF ║ 1110xxxx 10xxxxxx 10xxxxxx   16bits//汉字等                               

       010000 - 10FFFF ║ 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx 22bits//辅助平面字符                    

       BOM: EFBBBF 推导                                                                                 

              FEFF(11111110,11111111)                                                                   

              转换规则: 1110xxxx 10xxxxxx 10xxxxxx                                                      

              EF,BB,BF(11101111, 10111011, 10111111)                                                    

                                                                                                        

3.5、UTF-16,用16bit作为最小单元,2个字节,必然有字节序问题                                             

       对 UCS-2 用2B直接保存。                                                                          

       对UCS-4 用4B直接保存                                                                             

       不兼容ASCII,固定长度,浪费资源,但速度快                                                         

       UTF-16LE-BOM: FF FE (windows默认)                                                                

       UTF-16BE-BOM: FE FF                                                                              

                                                                                                        

3.6、UTF-32 对应UCS-4 用4B直接保存,固定长度,浪费资源                                                  

                                                                                                        

3.7、实例:"汉字a\r\n"(unicode: U+6C49,U+5B57,U+0061,U+000D,U+000A),windows7下对应的各种编码。          

       ASCII                                                                                            

              BABAD7D6 610D0A                                                                           

       UTF-8(deflaut: 带BOM)                                                                            

              EFBBBF E6B189E5AD97 610D0A                                                                

       UTF-16                                                                                           

              FFFE 496C575B 61000D000A00                                                                

       UTF-16-big edn                                                                                   

              FEFF 6C495B57 0061000D000A                                                                

       Unicode-ascii escaped                                                                            

              \uFEFF\u6C49\u5B57a                                                                       

相关推荐