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...