字符編碼

亂碼html

主要緣由有:web

1. 文本文件的編碼與解碼程序不一致(如:瀏覽器把GBK碼的網頁當成Big5碼進行顯示)windows

2. 字體中沒有對應文字的形狀定義(表現爲使用方框來填充)api

ASCII / EASCII1個字節)- 起源瀏覽器

下面的ASCII表中:淡藍色部分控制字符淡灰色部分可顯示字符ide

EASCII是ASCII的擴充,新增了的符號包括表格符號計算符號希臘字母特殊的拉丁符號工具

 

http://www.rapidtables.com/code/text/ascii-table.htm字體

在Windows下,打開小鍵盤,按住ALT鍵,而後輸入EASCII碼[如:按住ALT鍵並依次輸入數字鍵區數字二、四、7可輸入÷]。編碼

在Vim中,在插入模式下,能夠先按Ctrl-V,再輸入表明EASCII碼的(至多三位)十進制數字。idea

 

ASCII/EASCII編碼被世界上任意一種字符編碼所兼容!!

 

GB23十二、GBK、GB18030多字節字符集【MBCS】,最多見的MBCS實現是雙字節字符集 (DBCS))- 各自爲政

【內容】:

GB2312字符集中除經常使用簡體漢字字符外還包括希臘字母日文平假名片假名字母俄語西裏爾字母等字符共7445個字符。

GBK增長了繁體字生僻字漢字部首符號豎排標點符號等內容,是GB2312編碼的超集,向下徹底兼容GB2312,兼容的含義是不只字符兼容,並且相同字符的編碼也相同。共20902個字符。

GB18030收錄了全部Unicode3.1中的字符,包括中國少數民族字符,GBK不支持的韓文字符等等,也能夠說是世界大多民族的文字符號都被收錄在內。

【特色】:

GB2312和GBK都是雙字節等寬編碼,若是算上和ASCII兼容所支持的單字節,也能夠理解爲是單字節和雙字節混合的變長編碼。

GB18030編碼是變長編碼,有單字節、雙字節和四字節三種方式。

GB18030 > GBK > GB2312,依次向下兼容。

 

除了GB系列的中文編碼方式外,世界各個地區也都有本身的編碼方式,例如:港澳臺地區的繁體漢字Big5編碼日本的SJIS編碼韓國的KSC編碼

這些字符編碼之間不兼容,互相沖突,給全球信息交換帶來了很大的麻煩。

 

UNICODE - 天下歸一

標準方式ucs2ucs4

ucs2:用兩個字節編碼;可容納65536個字符,基本能夠包含世界全部國家的經常使用文字了。

ucs4:用四個字節編碼;可容納2147483648(21億)個字符,若是須要考慮一些偏僻字,那麼ucs4則絕對能夠知足了。

標準方式將全部字符一視同仁,會帶來浪費空間的問題,所以,人類在標準方式的基礎上,發明了uft編碼。

實現方式utf8utf16utf32

utf8以字節爲單位對Unicode進行編碼,一個英文字符佔1個字節,漢字佔3個字節;

utf16以16位無符號整數爲單位對Unicode進行編碼,中文英文都佔2個字節;utf16可當作是ucs2的父集。對於兩個字節的ucs碼,utf16編碼就等於ucs碼。

       英文範圍:0x0000-0x007F    中文範圍:0x4E00-0x9FBF

utf32以32位無符號整數爲單位對Unicode進行編碼,中文英文都佔4個字節。utf32可當作是ucs4的父集,目前uft32徹底等同於ucs4。

中文"漢字"的utf八、utf1六、utf32的編碼以下:

1 BYTE data_utf8[] = {0xE6, 0xB1, 0x89, 0xE5, 0xAD, 0x97}; // UTF-8編碼
2 WORD data_utf16[] = {0x6c49, 0x5b57}; // UTF-16編碼
3 DWORD data_utf32[] = {0x00006c49, 0x00005b57}; // UTF-32編碼

小端大端(uft1六、uft32) 

 

x86,MOS Technology 6502,Z80,VAX,PDP-11等處理器爲Little endian。注:windows系統使用的x86的處理器,所以windows爲小端序
Motorola 6800,Motorola 68000,PowerPC 970,System/370,SPARC(除V9外)等處理器爲Big endian
ARM, PowerPC (除PowerPC 970外), DEC Alpha, SPARC V9, MIPS, PA-RISC and IA64的字節序是可配置的。

 

文本文件在起始處使用BOM(Byte Order Mark)來區分不一樣字節序的utf編碼,具體以下:

 

在線工具  http://tool.chinaz.com/tools/unicode.aspx

                http://www.haomeili.net/Code/DetailCodes?wd=%E4%B8%AD 

 

windows記事本

注:ANSI - 表示使用本地系統的字符集

notepad++

 

注:ANSI - 表示使用本地系統的字符集

vs2008

vs2008工程字符集設置

注:未設置 - 表示使用本地系統的字符集。

本地系統的字符集可用GetACP()獲取當前的codepage值來獲得,codepage值與字符集的對應表在這裏!!!

能夠在「區域和語言」面板中經過「更改系統區域設置」來修改當前的codepage值。

 

 

windows對unicode的支持

Windows操做系統內核中的字符表示爲UTF-16小尾序,能夠正確處理、顯示以4字節存儲的字符。

可是WindowsAPI實際上僅能正確處理UCS-2字符,即僅以2字節存儲的,碼位小於U+FFFF的Unicode字符。

其根源是Microsoft C++語言把wchar_t數據類型定義爲16比特的unsigned short,

這就與一個wchar_t型變量對應一個寬字符,能夠存儲一個Unicode字符的規定相矛盾。

相反,Linux平臺的GCC編譯器規定一個wchar_t是4字節長度,能夠存儲一個UTF-32字符,寧肯浪費了很大的存儲空間。

驗證程序:

參考

中文編碼雜談

字符編碼的前世此生

相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息