首頁 >Java >Java基礎 >java中的字元出現亂碼

java中的字元出現亂碼

王林
王林原創
2019-11-26 16:45:092364瀏覽

java中的字元出現亂碼

原因:

編解碼不一致導致字元亂碼。

首先,我們可以透過呼叫java.nio.charset.Charset.defaultCharset()來取得系統的預設字元集,中文Windows系統都是GBK,所以JVM預設都是以GBK字元集來進行編解碼。

相關影片學習教學:java教學影片

亂碼產生最大的可能性在於編解碼不一致。

// 代码片段1:
byte[] read = "你好abc".getBytes(); 
String result = new String(read);
System.out.println(result);

上訴這段代碼一共有3步:

#1、編碼。這裡為了看起來更簡潔就這樣寫,事實上和你從文件/網路等其他媒介讀取是一樣的,原本輸入流是什麼類型編碼,讀取後也是什麼類型編碼。這裡沒有指定編碼方式,所以預設為GBK。

2、解碼。我們最終的操作都是字串對象,可以透過指定字串的對位元組數組的解碼方式,最終獲得一個字串對象。這裡沒有指定解碼方式,所以預設為GBK。

3、輸出、使用字串。事實上這裡還有一次編解碼過程,就是輸出流編碼為GBK,控制台解碼為GBK,最終顯示。因為輸出、使用字串時都是以系統預設字元集進行,不存在編解碼不一致的可能,所以這裡不會是亂碼根源。

假設我們將輸入流的編碼改一下:

// 代码片段2:
byte[] read = "你好abc".getBytes("utf-8"); 
String result = new String(read);
System.out.println(result);

再來分析一下3步驟:

1、編碼,utf-8;

##2 、解碼,gbk。

編解碼不一致,這裡便產生了亂碼。

至於如何修復,相信已經很清楚了。

修復方法如下:

// 代码片段3:
byte[] read = "你好abc".getBytes("utf-8"); 
String result = new String(read,"utf-8");
System.out.println(result);

將解碼方式改為與編碼對應就可以了。

小結:

1、我們一般比較難控制輸入流是什麼編碼,所以注意解碼時與輸入流的編碼類型一致即可。我們一般在呼叫輸入流的相關方法看到有charset參數,就是指解碼方式。

2、輸出流同樣可以操作其編碼方式,如果後續會以輸入流操作這個輸出的結果,比如說文件,只要都以預設的方式進行,便不會產生亂碼。我們一般在呼叫輸出流的相關方法看到有charset參數,就是指編碼方式。

推薦相關文章教學:

java入門教學#

以上是java中的字元出現亂碼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn