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

看板java作者 (蔥頭)時間10年前 (2015/06/20 10:48), 編輯推噓1(104)
留言5則, 1人參與, 最新討論串1/2 (看更多)
"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輸出嗎? 如果上面有錯誤的地方再麻煩各位修正 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.34.181.227 ※ 文章網址: https://www.ptt.cc/bbs/java/M.1434768532.A.360.html

06/20 14:20, , 1F
char 跟 byte 的差別, 在 byte 時就是原始編碼, 轉成 char
06/20 14:20, 1F

06/20 14:21, , 2F
就永遠是 unicode, 有一些函式可以做轉換
06/20 14:21, 2F

06/20 14:22, , 3F
String 物件也是 unicode, 底層是 char
06/20 14:22, 3F

06/20 14:22, , 4F
所以轉成 String 物件那一刻就轉換了
06/20 14:22, 4F

06/20 14:22, , 5F
而 getBytes() 出來是 byte, 所以轉回來就是在這裡轉
06/20 14:22, 5F
文章代碼(AID): #1LXDIKDW (java)
文章代碼(AID): #1LXDIKDW (java)