[問題] java 執行時的 unicode轉換問題

作者: tas72732002 (蔥頭)   2015-06-20 10:48:50
"java在執行的時候所有的字元都是被轉成unicode, 包含編譯後的.class檔案", 請問一下java在讀取與寫入的時候他的編碼是如何轉換的?
讀取部分 :
假設這時我使用FileInputStream來讀取一個utf-8的檔案,
FileInputStream f = new FileInputStream("d:\test.txt");
while((length = stream.read(buffer, 0, 1024)) != -1) {
String str = new String(buffer, 0, length);
}
這時我印出length, 他所顯示中文字元是占用了3個byte(length = 3)代表是UTF-8不是unicode, JVM什麼時候會將他轉成unicode呢? 不是說字元都是unicode處理嗎?
寫入部分 :
OutputStream os = new FileOutputStream("d:\\one.txt", true);
String str = "hello world 測試\r\n";
byte[] buffer = str.getBytes();
os.write(buffer);
os.close();
這時系統自動產生的檔案是UTF-8格式, 網路上說會以作業系統的預設編碼的格式, 寫入的內容當然也是UTF-8編碼, 這部分不太確定~
我想請問寫入時strm 會先經過JVM將str以 unicode編碼 再轉成 UTF-8輸出嗎?
如果上面有錯誤的地方再麻煩各位修正
作者: LPH66 (-6.2598534e+18f)   2015-06-20 14:20:00
char 跟 byte 的差別, 在 byte 時就是原始編碼, 轉成 char就永遠是 unicode, 有一些函式可以做轉換String 物件也是 unicode, 底層是 char所以轉成 String 物件那一刻就轉換了而 getBytes() 出來是 byte, 所以轉回來就是在這裡轉

Links booklink

Contact Us: admin [ a t ] ucptt.com