[java IO流]之編碼和解碼

小杆子發表於2021-02-10

碼錶的理解:

在計算機中無論任何陣列的傳輸、儲存、持久化,都是以二進位制的形式體現的,那麼當我存一個字元的時候,計算機需要持久化到硬碟,或者儲存在記憶體中。這個時候儲存在記憶體、硬碟的資料顯然也是二進位制。那麼當我需要從硬碟、記憶體中取出這些字元,再顯示的時候,為什麼二進位制會變成了字元呢?

這就是碼錶存在的意義:

1.碼錶其實就是一個字元和其對應的二進位制相互對映的一張表。

2.這張表中規定了字元和二進位制的對映關係。

3.計算機儲存字元時將字元查詢碼錶,然後儲存對應的二進位制。

4.計算機取出字元時將二進位制查詢碼錶,然後轉換成對應的字元顯示。

大致可以這樣理解:

1.不同的碼錶所容納的字元對映也是不同的

2.在有些碼錶中一個字元佔用1個位元組,1個位元組能表示的範圍是-128到127,總共為256。所容納256個字元對映

3.而有的碼錶中一個字元佔用2個,甚至3個位元組,因此能容納的字元對映也更多

常見的碼錶:
ASCII:

美國碼錶,碼錶中只有英文大小寫字母、數字、美式標點符號等。每個字元佔用1個位元組,所有字元對映的二進位制都為正數,因此有128個字元對映關係。

GB2312:

相容ASCII碼錶,並加入中文字元,碼錶包含英文大小寫字母、數字、美式標點符號佔一個位元組,中文佔兩個位元組,中文對映的二進位制都是負數,因此有了128x128=16384個字元對映關係。

GBK/GB18030:

相容GB2312碼錶,英文大小寫字母,數字,美式標點符號,佔一個位元組。中文又佔兩個位元組 ,第一個位元組為負數,第二個位元組為正數和負數,因此有128*256=32768個字元對映關係。

Unicode碼錶:

國際編碼表,包含各國大多數常用字元,每個字元都佔用2個位元組,因此有65536個字元對映關係。Java語言使用的就是Unicode碼錶

UTF-8碼錶:(是Unicode編碼表的一種實現形式)

同樣是國際編碼表,但英文佔一個位元組,中文佔3個位元組

www.cnblogs.com/csguo/p/7402034.ht...

編碼和解碼:

編碼:

編碼是資訊從一種形式或格式轉換為另一種形式的過程稱為編碼

簡單來說:編碼就是將看的懂的資訊透過編碼表轉換成為看不懂得資訊。

解碼:

是編碼的逆過程。

簡單來說,解碼就是將看不懂的資訊透過編碼表轉換為看的懂的資訊

注意:在開發當中要求伺服器和客戶端的編碼保持一致,雙方提前約定好一種編碼表

亂碼的原因:

1.人為轉換

2.伺服器和客戶端編碼表不一致

3.伺服器系統編碼和人為編碼不一致

4.URL編碼和人為編碼不一致

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章