《Linux及安全》實踐3.3

《Linux及安全》實踐三 字符集總結與分析

【by lwr】linux

1、ISO、UCS/UTF、GB系列字符集分析

1.字符集&字符編碼

  • 字符集(Charset):是一個系統支持的全部抽象字符的集合。也就是說,這是相對固定的、包含大量字符的集合。安全

  • 字符編碼(Character Encoding):是一套法則,使用該法則可以對天然語言的字符的一個集合(如字母表或音節表),與其餘東西的一個集合(如號碼或電脈衝)進行配對。也就是說,這是動態的、方法性質的編碼規則。服務器

2.ASCII碼

  • 總述:
    • ASCII(美國信息交換標準代碼)是基於拉丁字母的一套電腦編碼系統。它主要用於顯示現代英語,而其擴展版本EASCII則能夠勉強顯示其餘西歐語言。它是現今最通用的單字節編碼系統,等同於國際標準ISO/IEC 646
  • 碼字表
    • ASCII的最大缺點是隻能顯示26個基本拉丁字母、阿拉伯數目字和英式標點符號,所以只能用於顯示現代美國英語。

3.GB碼

  • 總述:
    • GB2312或GB2312-80是中國國家標準簡體中文字符集,全稱《信息交換用漢字編碼字符集·基本集》,又稱GB0,由中國國家標準總局發佈
    • GB2312規定:一個小於127的字符的意義與原來相同,但兩個大於127的字符連在一塊兒時,就表示一個漢字,前面的一個字節(稱之爲高字節)從0xA1到 0xF7,後面一個字節(低字節)從0xA1到0xFE,這樣就能夠組合出大約7000多個簡體漢字
    • 在這些編碼裏,還把數學符號、羅馬希臘的 字母、日文的假名們都編進去了,連在ASCII裏原本就有的數字、標點、字母都通通從新編了兩個字節長的編碼,這就是常說的"全角"字符,而原來在127號如下的那些就叫"半角"字符。

4.UCS/UTF

  • 總述:
    • 通用字符集(Universal Character Set,UCS)是由ISO制定的ISO 10646(或稱ISO/IEC 10646)標準所定義的標準字符集
    • Unicode 是基於通用字符集(Universal Character Set)的標準來發展,而且同時也以書本的形式[1]對外發表。Unicode 還不斷在擴增, 每一個新版本插入更多新的字符。
  • 以UTF-8爲例
    • UTF-8使用一至四個字節爲每一個字符編碼:
      1. 128個US-ASCII字符只需一個字節編碼(Unicode範圍由U+0000至U+007F)。
      2. 帶有附加符號的拉丁文、希臘文、西裏爾字母、亞美尼亞語、希伯來文、阿拉伯文、敘利亞文及它拿字母則須要二個字節編碼(Unicode範圍由U+0080至U+07FF)。
      3. 其餘基本多文種平面(BMP)中的字符(這包含了大部分經常使用字)使用三個字節編碼。
      4. 其餘極少使用的Unicode輔助平面的字符使用四字節編碼。

2、設置、修改系統默認字符集

1.查看虛擬機的字符集:

    • 因而可知,該虛擬機的字符集爲zh_US.UTF-8。

2.查看服務器支持的編碼方式

3.修改字符集類型

    • 上圖可見,LANG字符集類型修改成en_CA.utf-8。

4.查看某個文件的字符類型

    • 因而可知,我選擇的hello.c文件是ASCII編碼方式的

3、同一文件的不一樣存儲方式

1.編寫文件並以不一樣方式存儲

  1. 編寫內容均爲「20135216劉蔚然[回車]LWR」的文本文件,分別用ANSI、Unicode、Unicode big endian、UTF-8的編碼方式存儲
  2. 下載並安裝UltraEdit
  3. 用該軟件打開對應文件以後,轉換爲16進制編碼

  4. 查看編碼表,找到分別對應ANSI、Unicode、UTF-8的本人姓名編碼
    • C1F5 5218 E5 88 98 劉
    • CEB5 851A E8 94 9A 蔚
    • C8BB 7136 E7 84 B6 然
  5. 查看各編碼方式
      • 漢字部分爲C1F5 CEB5 C8B8就是「劉蔚然」的gb3212編碼,而阿拉伯數字20135216(32 30 31 33 35 32 31 36)和英文字母LWR(4C 57 52)都是用ascii編碼表示,大端方式編碼。
      • 最開頭有一個FE FF ,表明採用大端方式,依然是unicode編碼,5218 851A 7136仍然是Unicode表示本人姓名的編碼,而阿拉伯數字20135216(0032 0030 0031 0033 0035 0032 0031 0036)和英文字母LWR(004C 0057 0052)都是用ascii編碼表示,也採用大端
      • 最開頭有一個FF FE,表明着ucs-2,採用小端方式,其餘同上面的Unicode big endian
      • 開頭是EF BB BF是utf-8的標誌,以後的編碼按照大端方式排列,漢字實用的是utf-8格式:E5 88 98 E8 94 9A E7 84 B6;而數字20135216仍然是ASCII碼(32 30 31 33 35 32 31 36),字母也是ASCII碼(LWR)
  6. 總結
    • 咱們發現這4種編碼方式只是漢字不一樣格式運用不一樣編碼,而阿拉伯數字和英文字母都是用ascii編碼表示,也就是爲何咱們有時候打開一個文件會出現亂碼,而阿拉伯數字和英文字母都是正常的緣由,漢字在不一樣的編碼格式中都是有不一樣的漢字編碼,而阿拉伯數字和英文字母通用ascii編碼表示。
相關文章
相關標籤/搜索