Java中為什麼有時候通過指定編碼集無法解決亂碼

2021-09-08 17:48:42 字數 1735 閱讀 4447

@toc

當我們程式設計的時候都遇到過出現亂碼的情況,這通常是使用了不匹配的編碼表導致的,這是我們可以用指定的編碼表的方式解決亂碼問題如下面 的**

string str =

"你";

byte[

] ch_gbk = str.

getbytes

("gbk");

system.out.

println

(arrays.

tostring

(ch_gbk));

// [-60, -29]

// 這裡我們模擬用錯編碼表導致亂碼

string srt_2 =

newstring

(ch_gbk,

"iso8859-1");

system.out.

println

(srt_2)

;// 這時候我們可以同指定編碼解碼集的方式解碼再編碼的方式解決亂碼

byte[

] byte_gbk = srt_2.

getbytes

("iso8859-1");

system.out.

println

(new

string

(byte_gbk,

"gbk"))

; system.out.

println

(arrays.

tostring

(byte_gbk));

// [-60, -29]

但是有時候我們同過這種方式依然無法解決亂碼,。例如同樣的**當我用utg-8編譯碼的時候,依然是亂碼,仔細看**你就會發現,"你"用位元組表示是[-60, -29],當我用utf-8編譯碼後他的位元組形式變成了[-17, -65, -67, -17, -65, -67],也就是說當我們utf-8查表發現不匹配時會返回[-17, -65, -67, -17, -65, -67]替代了我們原來"你「的位元組[-60, -29],這樣我在通過指定編碼表當然就解決不了亂碼

string str =

"你";

byte[

] ch_gbk = str.

getbytes

("gbk");

system.out.

println

(arrays.

tostring

(ch_gbk));

// [-60, -29]

// 這裡我們模擬用錯編碼表導致亂碼

string srt_2 =

newstring

(ch_gbk,

"utf-8");

system.out.

println

(srt_2)

;// 這時候我們可以同指定編碼解碼集的方式解碼再編碼的方式解決亂碼

byte[

] byte_gbk = srt_2.

getbytes

("utf-8");

system.out.

println

(new

string

(byte_gbk,

"gbk"))

; system.out.

println

(arrays.

tostring

(byte_gbk));

// [-17, -65, -67, -17, -65, -67]

lua中函式為什麼有時候可以省略」 」

lua中函式為什麼有時候可以省略 dionysoslai 906391500 qq.com 20150825 首先,看兩個問題背景 1.簡單的 print函式 print hello print hello,通常寫法是print hello print 42 not work,正確寫法是print ...

JS為什麼有時候要做兩次encodeURI

對於var url b.jsp?name u name 要想把中文的name傳到後台,需要對url進行一次編碼,否則是亂碼。有時會亂碼,為什麼?因為接收時,直接 string paramvalue request.getparameter paramname tomcat 容器會自動解碼。encod...

為什麼有時候字母 f 不能從pdf檔案中拷貝出來

最近從pdf檔案中拷貝 標題的時候,發現標題中的 f 複製出來是亂碼,情況如下,複製這篇 的標題,得到 ff變成了亂碼。奇怪的是,中別處的字母f有能正常顯示的,個別組合,如fi也不能正常顯示。原因在於,這樣的字母組合就是所謂的連寫,ligatures。如果嘗試選擇連寫字母,會發現他們僅僅只是乙個字母...