各種字符集編碼


各種字符集

由於本人在學習過程中,經常被不同類型的編碼折磨故學習總結了一波。現在最常見的是utf-8,同時在不同編輯器打開時utf-8的注釋會被翻譯成亂碼,所以讓我很苦惱,不說了,開始總結。

Unicode字符集

Unicode字符集(簡稱為UCS),國際標准組織於1984年4月成立ISO/IEC JTC1/SC2/WG2工作組,針對各國文字、符號進行統一性編碼。1991年美國跨國公司成立Unicode Consortium,並於1991年10月與WG2達成協議,采用同一編碼字集。目前Unicode是采用16位編碼體系,其字符集內容與 ISO10646的BMP(Basic Multilingual Plane)相同。Unicode於1992年6月通過DIS(Draf International Standard),目前版本V2.0於1996公布,內容包含符號6811個,漢字20902個,韓文拼音11172個,造字區6400個,保留 20249個,共計65534個。Unicode編碼后的大小是一樣的.例如一個英文字母 "a" 和 一個漢字 "好",編碼后都是占用的空間大小是一樣的,都是兩個字節!

UNICODE字符集有多個編碼方式,分別是UTF-8UTF-16UTF-32UTF-7編碼。

UTF-8(最常用的字符集)

TF-8(8位元,Universal Character Set/Unicode Transformation Format)是針對Unicode的一種可變長度字符編碼。它可以用來表示Unicode標准中的任何字符,而且其編碼中的第一個字節仍與ASCII相容,使得原來處理ASCII字符的軟件無須或只進行少部分修改后,便可繼續使用。因此,它逐漸成為電子郵件網頁及其他存儲或傳送文字的應用中,優先采用的編碼。

UTF-8編碼規則:如果只有一個字節則取值為\x00-\x7F。其余字節按長度進行以下拓展:

UTF-8由4種編碼方式實現,即UTF8-1 / UTF8-2 / UTF8-3 / UTF8-4。

 

UTF-16

UTF-16是Unicode字符編碼五層次模型的第三層:字符編碼表(Character Encoding Form,也稱為 "storage format")的一種實現方式。即把Unicode字符集的抽象碼位映射為16位長的整數(即碼元)的序列,用於數據存儲或傳遞。Unicode字符的碼位,需要1個或者2個16位長的碼元來表示,因此這是一個變長表示。

編碼模式:UTF-16的大尾序和小尾序儲存形式都在用。一般來說,以Macintosh制作或儲存的文字使用大尾序格式,以Microsoft或Linux制作或儲存的文字使用小尾序格式。

UTF-16比起UTF-8,好處在於大部分字符都以固定長度的字節(2字節)儲存,但UTF-16卻無法兼容於ASCII編碼。

base64(網絡傳輸)

Base64是網絡上最常見的用於傳輸8Bit字節碼的編碼方式之一,Base64就是一種基於64個可打印字符來表示二進制數據的方法。

Base64編碼是從二進制到字符的過程,可用於在HTTP環境下傳遞較長的標識信息(即 傳輸一些網絡文件,圖片,視頻等)。采用Base64編碼具有不可讀性,需要解碼后才能閱讀。

Base64由於以上優點被廣泛應用於計算機的各個領域,然而由於輸出內容中包括兩個以上“符號類”字符(+, /, =),不同的應用場景又分別研制了Base64的各種“變種”。為統一和規范化Base64的輸出,Base62x被視為無符號化的改進版本。

Base64的索引與對應字符的關系如下表所示:

 

Java中實現Base64:

package com.first;

import org.junit.Test;

import java.io.UnsupportedEncodingException;
import java.util.Base64;

public class Test {

   @Test
   public void test() throws UnsupportedEncodingException {
       // 編碼
       String encode = Base64.getEncoder().encodeToString("So".getBytes("UTF-8"));
       System.out.println(encode);
       // 解碼
       byte[] decode = Base64.getDecoder().decode(encode);
       System.out.println(new String(decode, "UTF-8"));
  }

}

GBK字符集(與utf-8轉換時,中文會出現亂碼)

GBK編碼(Chinese Internal Code Specification)是中國大陸制訂的、等同於UCS的新的中文編碼擴展國家標准。gbk編碼能夠用來同時表示繁體字和簡體字,而gb2312只 能表示簡體字,gbk是兼容gb2312編碼的。GBK工作小組於1995年10月,同年12月完成GBK規范。該編碼標准兼容GB2312,共收錄漢字 21003個、符號883個,並提供1894個造字碼位,簡、繁體字融於一庫。Windows95/98簡體中文版的字庫表層編碼就采用的是GBK,通過 GBK與UCS之間一一對應的碼表與底層字庫聯系。 英文名:Chinese Internal Code Specification

  • 中文名:漢字內碼擴展規范1.0版

  • 雙字節編碼,GB2312-80的擴充,在碼位上和GB2312-80兼容

  • 范圍:8140~FEFE(剔除xx7F)共23940個碼位

  • 包含21003個漢字,包含了ISO/IEC 10646-1中的全部中日韓漢字

  • 作用:它是GB2312的擴展,加入對繁體字的支持,兼容GB2312。

  • 位數:使用2個字節表示,可表示21886個字符。

  • 范圍:高字節從81到FE,低字節從40到FE。

ASCII

ASCII ((American Standard Code for Information Interchange): 美國信息交換標准代碼)是基於拉丁字母的一套電腦編碼系統,主要用於顯示現代英語和其他西歐語言。它是最通用的信息交換標准,並等同於國際標准ISO/IEC 646。ASCII第一次以規范標准的類型發表是在1967年,最后一次更新則是在1986年,到目前為止共定義了128個字符。

常見ASCII碼的大小規則:0~9<A~Z<a~z。

1)數字比字母要小。如 “7”<“F”;

2)數字0比數字9要小,並按0到9順序遞增。如 “3”<“8” ;

3)字母A比字母Z要小,並按A到Z順序遞增。如“A”<“Z” ;

4)同個字母的大寫字母比小寫字母要小32。如“A”<“a” 。

幾個常見字母的ASCII碼大小: “A”為65;“a”為97;“0”為 48。

 

以上就是比較常見的字符編碼集,希望對大家有所幫助。

參考網址:

https://www.cnblogs.com/happyday56/p/4135845.html

https://blog.csdn.net/qq_20545367/article/details/79538530

如有侵權,告知必刪。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM