"java檔案-class檔案-JVM顯示" 編碼執行過程
阿新 • • 發佈:2018-11-01
以GBK 方式編寫下面java檔案
import java.io.UnsupportedEncodingException; import java.nio.charset.Charset; public class EscapeTest { public static void main(String[] args) throws UnsupportedEncodingException { String str = "你好"; byte[] b1 = str.getBytes(); String encodedMode = "UTF-8"; System.out.println(new String(b1,encodedMode)); System.out.println(Charset.defaultCharset()); } }
開啟命令列視窗, 執行
javac EscapeTest.java
java EscapeTest
顯示內容為
原始碼中encodedMode 賦值為 "GBK" 後結果為:
這裡就可以正常顯示.
有這樣兩個不同結果是因為:
java 編譯器將str 的程式碼點按照utf-16 存入到class 檔案. JVM 呼叫該class 檔案後分別以"UTF-8" 和"UTF-16" 進行解碼. 來時什麼編碼, 顯示時候還是什麼編碼, 所以"GBK" 解碼是正常.