跳到主要內容

電腦編碼系統介紹


(參考資料:wiki + 電腦)
  工作上在練習寫Struts架構時,發現編碼蠻重要的,例如設定登入頁面,設定編碼不一致時會出現編碼錯誤,加上自己不是很懂整個概念,而整理了這篇電腦編碼系統。

電腦編碼系統介紹:

--------------------------------------------------------

()基礎概念
()常見的編碼及說明
()網際網路的發展
()Unicode

--------------------------------------------------------


()基礎概念:
由於人能理解各種特殊複雜的文字及符號,而電腦只懂得兩個數字,即01,因此我們必須制定一些規則,將特殊複雜的文字及符號,用01的數字組合表示。
如大寫英文字母”A”,在ASCII編碼中,”1000001(7bits)表示。”1000001”稱為字元集、字符集(Character encoding)
    所以字元編碼是一種系統,會將支援的字元集中的每一個字元的與代表該字元的某個值配對。
PSBit(位元)為最小單位:01Bytes(位元組)由八個Bit所組成。



1.     ASCII(American Standard Code for Information Interchange)
(1)  美國資訊交換標準碼,字面意思就知此編碼由美國制定,為基於拉丁字母的一套字元邏輯,ASCII編碼僅用7bits,最多僅能表示27128個字元,所以能展現的字元極其有限,只能表達英文字母A-Za-z、數字0-9及少量標點符號,適合用於開發英文環境中。
(2) 每台電腦都有此編碼,用來儲存英文字元素。其他語言國家透過相同的ANSI編碼,去做自己國家的語言文字對應,因而產生不同的編碼系統。若是用同樣文字轉換成別的編碼辨識,會形成亂碼。(2Bytes-16bits對應一個文字進行儲存)

2.    EASCII(Extended American Statndard Code for Information Interchange)
(1)  ASCII編碼對於英語系國家是足夠使用的,但歐洲許多國家不能用純英文的編碼來表示字元,例如a上面加一個圈、希臘符號等等都無法使用ASCII來呈現字元,為了解決此問題,而發展出了Extended ASCII
(2) 如同其名,是ASCII的延伸版,EASCII使用8bits來編碼,比ASCII1bit,能表示256個字元,雖然多了128個字元但還是無法容納整個歐洲國家的文字,編碼表需要因地制宜,故EASCII依然會依照國家不同,而有不同的字元編碼,不同地區的編碼仍舊無法統一。

3.    ISO/IEC 8859(簡稱ISO 8859):此時為了歐洲國家統一使用字元標準,國際標準組織(ISO)與國際電工委員會(IEC)出來一起訂製EASCII編碼的標準。有ISO/IEC 8859-1 ~ 16多種符號集,最廣泛被運用的是ISO/IEC 8859-1256個字元主要涵蓋了西歐文字,而歐洲與北美一直都是電腦科學發展的重心,故間接加速使用ISO8859-1的接受度。

4.    Windows-1252:係由微軟制定的字元編碼(或稱為CP-1252),這套編碼標準大部分遵守ISO 8859-1編碼方式,但仍有小部分有其落差,例如雙引號跟撇號,在非windows操作系統都變成問號或方格。Windows-1252被用於英文與西歐版本的Windows系統,成為目前常見的編碼之一。

5.    BIG5
(1)  中文碼分成兩類:Big5-1984Big5-2003(交換碼:CNS 11643)
(2) Big5-1984版:1984年資策會為了五大中文套裝軟體設計,包含文書處理、資料庫、試算表、通訊及繪圖,發展出的編碼方式。採用雙位元組,高、低位元組。
(3) Big5-2003版:2003年加入官方的CNS 11643附錄,成為官方標準。額外加上3954個字,共有17005個字。
(4) 常用的繁體中文編碼,由兩個位元組(2Bytes)表示一個字元,第一個位元組稱為高位位元組,第二個位元組稱為低位位元組。
(5) 又稱為大五碼或五大碼,為1983年台灣資策會為當時所開發的五大中文套裝軟體所制定的中文內碼,為正體中文社群(台港澳)中常見的編碼。
(6) 相容於ASCII,也就是同一個英文字母的編碼在ASCIIBIG5是一樣的。

CNS 11643:中文標準交換碼,是我國為資訊交換而制定的標準字元編碼規則,ISO認證通過。作為各種中文內碼轉換的媒介。

6.    Shift_JIS:是日本電腦系統常用的編碼表,能容納全形及半形拉丁字母、平假名、片假名、符號及日語漢字。

7.    CJK編碼:約同一時期,亞洲區的編碼同樣混亂,中文、日文、印度文、越語各個國家有自己的編碼系統。而亞洲語言的字元太多,光是中文常用字可能就有上千字,僅用1Byte=8bits=256個字元無法完全表達,故亞洲文字通常需要兩個以上的Byte來表示,因此亞洲體系又較歐美體系的編碼方式更為複雜。



1.     成熟前:在網際網路沒有發達的年代中,不同地區使用不同的編碼,甚至同一個國家內有時也沒有統一的編碼。在當時非大問題,當時只要彼此相連的電腦位置很相近,要連線的兩方只要互相講好要使用的編碼就沒問題。

2.    成熟後:隨著Internet的發展,全球的電腦皆可互相交換訊息,亞洲客戶可透過網路連上歐洲伺服器,此時如果從亞洲電腦輸入的字串在歐洲電腦不能正確顯示,那麼雙方的使用者會有很大困擾。此時,因地制宜的區域編碼就無法解決這個問題,為了在網際網路上流通資訊,必須逐漸捨棄舊有編碼方式,並建立一套新的機制,此時發展Unicode編碼方式。




()Unicode
Unicode的儲存方式,不同系統平台的設計,會有不同的儲存方式,儲存方式稱為Unicode轉換格式(UTF)

1.     UTF-8
(1)  Unicode萬國碼,為了解決傳統的字元編碼字元,無法在不同國家中使用而產生的,為了能夠在同一段文字,利用同一個編碼去呈現不同國家的語言,發展出Unicode的通用編碼,主要將全世界語言文字都收錄Unicode有兩大類。
l   UTF-8(8-bit Unicode Transformation Format):為Unicode實作之一,記錄方式是8bit一個單元,不同的文字採用不固定的長度紀錄。使用1~4Bytes來儲存一個字元。
n   ASCII字元只需1Bytes
n   希臘字、阿拉伯文、敘利亞文及拉丁文需要2Bytes
n   中文字則需要3Bytes來儲存。
b.     UTF-16(16-bit Unicode Transformation Format):主要是用16bit為一單位,基本上與UTF-8相容。但UTF-16有兩種存存儲方式,主要分別是「尾序(Endian)」的不同
n   Unicode-LEMicrosoftLinux的文件是以LE(Little Endian)來存的。
n   Unicode-BEMacintosh的文件是以BE(Big Endian)來存的。
(2) Unicode為一種概念,一個字元對應到一個數字(code point)。由於相容於ASCII,廣度夠(支援不同語系),深度也夠(幾乎能呈現每一語系的所有字元),現已逐漸成為編碼的標準。在開發新系統時,若無需相容於舊系統的負擔,建議直接使用UTF-8為預設編碼,如此在系統間或同系統內不同元件交換資料時,處理編碼上較為輕鬆。

2.    Code point
(1)  科學家將全世界所有的文字與符號都收錄進一個巨大的表格內,並給予每一個字元一個獨一無二的「代碼」(碼位Code pint),此概念就稱為萬國碼(Unicode)
(2) Unicode內,字元的Code point通常用U+」開頭,後面緊接著一組16進位的數字來表示,例如U+5566,代表此字。

3.    UTF(Unicode Transformation Format)UCS(Universal Character Set)
(1)  如同上面提到電腦只懂01,還必須得將Unicode的字元轉換成01,才能在電腦呈現字元,這個轉換過程稱之為mappingUnicode定義了兩種mapping 方法,分別為:UTFUCS 編碼。
(2) UTFUCS家族中各自有不同的編碼實作方式,例如UTF-7UTF-8UTF-16UTF-32UCS-2UCS-4等,其中UCS-2UTF-16已經過時的子集合,而UCS-4UTF-32功能上是相同的。
(3) Unicode有這麼多編碼方式,看起來複雜,但一般使用者只須認識UTF家族即可,又以UTF-8最為常見。

4.    UTF-8
(1)  Unicode紀錄了全世界所有的文字與符號,這麼多的文字與符號,如果要統一用固定長度的編碼方式來表達這麼多的文字,就必須得用多個位元組來表達一個字元,但會浪費儲存空間與傳輸寬頻。
(2) 對於英語系國家,使用ASCII編碼僅需1Byte就能表達一個字元,若Unicode反而需要用多個Bytes才能表達一個字元,那大家不就都不想用Unicode了嗎。
(3) UTF-8可以解決此問題,UTF-8是個可變長度的編碼,它使用1~6Bytes來表達一個字元,並向下相容ASCII,也就是說,UTF-8128個字元編碼與ASCII相同,如此一來處理英文字時就不會有浪費空間的問題。而當面對ASCII無法正確表示的字元時,UTF-8則使用多個Bytes來表達。
(4) 由於UTF-8具有可變長度以及不需要BOM(下述會提及)的優勢,UTF-8迅速地成為全世界最廣泛被使用的編碼方式。根據w3techs20153月的調查顯示,全世界網頁有83.9%使用UTF-8編碼,壓倒性的佔有率。
(5) UTF-8是一種針對Unicode的可變長度字元編碼。記錄方式是以8bit一個單位,不同的文字採用不固定的長度紀錄(1~6bytes)。電子郵件、網頁、網路傳送的資料,優先採用的編碼。

5.    UTF-16:用16bit為一單位,與UTF-8相容,有兩種儲存方式,Unicode-LEUnicode-BeOSCPU處理效能有關。
l   大尾序(Big-Endian,BE)Macintosh的文件是以BE來存的。
l   小尾序(Little-Endian,LE)MicrosoftLinux的文件是以LE來存的。

6.    BOM
(1)  先提及何謂Endianness,中文稱為位元組(bytes)順序,一種存儲規則。簡易的說,電腦內的資料都是以11010101  01100010這樣的方式儲存著,每8bits1byte,不同廠商製作的硬體在解釋一連串的01組合時,可能會有不同的方式去解釋位元組,解釋方式的不同,所mapping出來的字元就不同。若是使用錯誤的方式去解釋位元組,出來的結果會產生錯誤。
(2) 隨著科技發展,科學家採用一些方法來簡化Endianness造成的問題,例如Unicode Byte Order Mask(BOM)就是其中一個,UTF-16UTF-32Endianness的問題。
(3) 解決這錯誤的方式就是,主動在資料最前面加上一些特殊符號。這些特殊符號稱之為UnicodeByte order mark(BOM)。當程式開啟這些檔案時,一看到檔案開頭的BOM就立刻知道,哦哦,這檔案是用UTF-16編碼的,且用某方式去解釋其位元組排列。
(4) 然而,當提到UTF-8不需要BOM,事實上,UTF-8也可以有BOMUnicode並沒有強制規定。

7.    UnicodeUTF之間的關係:
(1)  用例子來說明,華啦啦啦,雨,下不停,句子中的
l   注音輸入法是:ㄌㄚ˙
l   拼音輸入法是:LA
l   Unicode表內:U+5566
(2) 即使別人不知道注音跟拼音輸入法,只要知道Unicode的編碼是U+5566是啦這個字就可。
(3) 實際在編碼時,會依照使用的編碼方式不同,將這個字編成不同的01組合,如:
l   BIG5B0D5
l   UTF-80xE5 0x95 0xA6,也就是11100101 : 10010101 : 10100110
l   UTF-160x5566(上述三者都是啦字)

(4) 要怎麼知道啦這個字的Unicode code printU+5566,上網查就可以。

留言

這個網誌中的熱門文章

107年高考資訊處理上榜心得(自修)

107 年高考資訊處理上榜心得 ( 自修 ) ------------------------------------------------------------------------- l    背景及報考動機 l    個人成績 l    準備經驗及時程規劃 l    各科準備方式 l    Q&A ------------------------------------------------------------------------- l    背景及報考動機: 小弟很幸運地今年考上高考資訊處理 ( 正取尾巴錄取 ) ,剛好這兩年開缺很多,今年總共錄取 117 人,正取 92 ,增額 25 人。因為自己也在網路上參考很多心得文章,所以想分享自己這次考上的心得。 先說一下自己考公職的歷程,所有的考試,都未曾補習過,小弟比較喜歡自己讀。考完公職才發現從小到大的考試根本無法比。準備資訊處理的考試前前後後時間加起來算是一年左右吧。 101/06              大學畢業 ( 資訊傳播工程學系 ) 102/09              考取特考交通行政 ( 參考: 交通行政上榜心得 ) 104/07              差 0.5 分考上高考交通行政 105/01              考取桃園捷運有限公司 106/03-12        邊工作 ( 桃捷 ) 邊念 106/07              差 6 分考上高考資訊處理 107/01            離職當全職考生 小弟並非第一次參與國家考試了,只是這次考試類別從交通行政轉換成資訊處理。本來考上桃捷公司就沒有想轉換跑道了,但在同事勸說下,再加上去年的高考考試,差 6 分考上,所以才毅然堅持地辭掉工作,當個全職考生,算賭一把機會 ( 只給自己兩年時間 ) 。 l    個人成績 - 資訊處理 107 年高考 ( 正取 ) 國文:                     56 ( 申 42 、測 14) 法學與英文:         66 資通網路:             56 程式語言:             7

閱讀心得:真希望17歲就學會的金融知識

書名:真希望 17 歲就學會的金融知識         作者:慎 泰俊 (Shin Taejun) 此書是在 2013 年 2 月 11 日記錄的心得內容,因學校教育沒有教導我們理財知識,而去書局找一些基本書來學習,本書由基礎觀點一步一步深入教導,例如了解風險與報酬、分散風險、現在與未來價值、應用篇 … 等,書中內容附有相關計算公式。除了教導理財知識,書中也提到我們可以把時間拿來做甚麼事情,這也是一種投資,投資自己。 想學習理財 / 投資等知識,必須一步一步慢慢來,才能成為理財高手,絕對沒有一步登天賺大錢的神蹟;重點在於自己的判斷與思考。 書中提到當一個 BETA 值低的人,就是做很少做的事情或專研該領域,當發生危機時,你會是一個很重要的人,因為只有你懂,你能處理別人處理不了的危機風險。 ※ BETA 係數說明 ---------------------------- 一、前言 二、朝會 三、 第一堂課 - 風險與報酬 四、 第二堂課 - 分散風險 五、 第三堂課 - 現在價值與未來價值 六、 第四堂課 - 應用篇 - 國文 七、 第五堂課 - 應用篇 - 社會 八、老師指導時間 九、放學後 ---------------------------- 一、前言 古羅馬思想家塞內卡 (Lucius Annaeus Seneca) 說過:「人生非常漫長,若能全部加以有效利用,就能豐富人生,完成最偉大的事。」 不論是任何狀況, 永遠都有無限的可能。只要你希望,就可以實現幾乎所有的事 。 二、朝會 1.       不容許任何失敗、把自己牢牢束縛住的人、只跟與自己類似的人相處的人、只跟其他人作相同事情的人,都是 無法妥善處理不確定事務的人 。 為了順利使用某事物,並加以妥善處理, 第一步就是瞭解其結構 。對於不確定事物的結構,只有重要三件事要注意: n    第一, 愈能接受不確定性,回報也愈大。 n    第二, 有辦法成功降低不確定性。 n    第三, 確定的現在與不確定的將來是兩碼子事 。 2.       先學習如何 思考重點 。 金融理論採用報酬 ( 回報 ) 與風險 ( 結果的不確定性 ) 的思考