String字串編碼解碼格式

2021-08-28 22:04:17 字數 2915 閱讀 8540

string.

getbytes()

//方法是得到乙個作業系統預設的編碼格式的位元組陣列。

string.

getbytes

(string decode)

//方法會根據指定的decode編碼返回某字串在該編碼下的byte陣列表示

newstring

(byte

b,string decode)

//按照指定的方法編碼

正常的編碼解碼

byte

b_gbk =

"中".

getbytes

("gbk");

string s_gbk =

newstring

(b_gbk,

"gbk");

system.out.

println

(s_gbk)

;//中

編碼解碼不統一導致亂碼

byte

b_gbk =

"中".

getbytes

("gbk");

string s_utf8 =

newstring

(b_gbk,

"utf-8");

system.out.

println

(s_gbk)

;//�� 導致亂碼

在一篇部落格中看到對iso8859-1的中文編碼解碼介紹感覺非常到位在裡摘抄一下

進一步理解

byte

b_gbk =

"中".

getbytes

("gbk");

byte

b_utf8 =

"中".

getbytes

("utf-8");

byte

b_iso88591 =

"中".

getbytes

("iso8859-1");

system.out.

println

(b_utf8.length)

;//3

system.out.

println

(b_gbk.length)

;//2

system.out.

println

(b_iso88591.length)

;//1

解碼時位元組陣列:

將分別返回「中」這個漢字在gbk、utf-8和iso8859-1編碼下的byte陣列表示,此時b_gbk的長度為2,b_utf8的長度為3,b_iso88591的長度為1。

編碼後:

而與getbytes相對的,可以通過new string(byte, decode)的方式來還原這個「中」字時,這個new string(byte, decode)實際是使用decode指定的編碼來將byte解析成字串。

string s_gbk =

newstring

(b_gbk,

"gbk");

string s_utf8 =

newstring

(b_utf8,

"utf-8");

string s_iso88591 =

newstring

(b_iso88591,

"iso8859-1");

system.out.

println

(s_gbk)

;//中

system.out.

println

(s_utf8)

;//中

system.out.

println

(s_iso88591)

;//?

原因:通過列印s_gbk、s_utf8和s_iso88591,會發現,s_gbk和s_utf8都是「中」,而只有s_iso88591是乙個不認識的字元,為什麼使用iso8859-1編碼再組合之後,無法還原「中」字呢,其實原因很簡單,因為iso8859-1編碼的編碼表中,根本就沒有包含漢字字元,當然也就無法通過"中".getbytes(「iso8859-1」);來得到正確的「中」字在iso8859-1中的編碼值了,所以再通過new string()來還原就無從談起了。

需要使用iso8859-1來操作中文則可以通過中轉,既然不可以操作中文字元,那麼是否可以通過操作別的編碼格式轉換後的位元組陣列,比如utf-8的位元組陣列來編碼成中文,雖然也是亂碼但是再通過iso8859-1來還原成utf-8時可還原結果

//獲取utf-8的位元組陣列

byte

b_utf8 =

"中".

getbytes

("utf-8");

string s_iso88591 =

newstring

(b_utf8,

"iso8859-1");

system.out.

println

(s_iso88591)

;//中

//還原

byte

bytes = s_iso88591.

getbytes

("iso8859-1");

s_iso88591 =

newstring

(b_utf8,

"utf-8");

system.out.

println

(s_iso88591)

;//中

這樣就既保證了遵守協議規定、也支援中文。

string字串格式

double val 1.034 var v1 val.tostring 1 var v2 string.format val 1.0 i.tostring padleft 12,0 或 i.tostring padright 12,0 string.format the value is 123....

字串編碼和解碼

計算機底層通過二進位制儲存資料,字串的儲存和展示有這樣的關係 字串 字元 二進位制儲存 在傳統的編碼方式中,如 ascii iso 8859 1,是直接將字元與二進位制數進行了對映,形成乙個字元表。這樣,儲存字串時,查詢字元表,把其中每個字元都用對應的二進位制數進行表示。當展示資料時,同樣查詢字元表...

python字串編碼解碼

為什麼需要編碼轉換 因為計算機之間的通訊使用的是byte位元組 a計算機作為傳送者,b計算機作為接受者 a str在記憶體中yiunicode表示 將字串編碼成byte位元組傳輸給b,b接收之後將byte位元組解碼成unicode顯示 s 如果當時2020 vae許嵩 解碼 s encode gbk...