看板 java 關於我們 聯絡資訊
"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
LPH66: char 跟 byte 的差別, 在 byte 時就是原始編碼, 轉成 char 06/20 14:20
LPH66: 就永遠是 unicode, 有一些函式可以做轉換 06/20 14:21
LPH66: String 物件也是 unicode, 底層是 char 06/20 14:22
LPH66: 所以轉成 String 物件那一刻就轉換了 06/20 14:22
LPH66: 而 getBytes() 出來是 byte, 所以轉回來就是在這裡轉 06/20 14:22