作者danny8376 (釣到一隻猴子@_@)
看板java
標題Re: [問題] big5轉utf8
時間Tue Mar 25 15:47:29 2014
※ 引述《Lordaeron (Terry)》之銘言:
: ※ 引述《LPH66 (186106078)》之銘言:
: : getBytes 應該就正是你所需要的東西
: : String.getBytes 共有四個 overload, 其中一個是舊時代的東西所以不管它
: : 剩下的三個是
: : getBytes()
: : getBytes(Charset)
: : getBytes(String)
: : 你用的應該是第一個, 它會轉成你的 system default charset
: : 你所需要的則是第二或第三個, 所傳進去的參數代表你要轉成的 charset
: : 第二個用 Charset 物件, 第三個則是直接傳入那個 Charset 的名字
: : 最簡單的做法就是用第三個然後傳入 "UTF-8" 就可以了
: : ---
: : 另外順帶一提, Java 的 String 內部是 Unicode
: : 如果從來源字串有正確的轉成 String 的話那這個問題就跟來源字串完全無關了
: : 檢查方法可以試著直接把那個 String 給印出來, 是你要的那就沒問題
: Java 的 String 內部是 Unicode 是指什麼呢?
: 你打開一個Big5存的文字檔, 讀取其中的內容, 用READLINE, 讀到字串中,
: 哪麼, 這字串的編碼會是?
內部是unicode存在記憶體
就像Win現行所有程式在記憶體內都是UTF-16編碼一樣的狀況
也就是說當你用big5去讀取big5的檔案
這中間會把檔案用你指定的big5去解碼
解完之後轉成unicode(UTF-16)之後塞進記憶體裡
而當你要輸出到OutputStream的時候
又會把這unicode轉成你要的編碼
這是所有支援unicode的程式內部會有的處理模式
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.115.216.102
→ Lordaeron:若果是這麼聰明, 為何會有encoding的參數的呢? 03/25 15:56
推 LPH66:"這中間會把檔案用你指定的big5去解碼" 該參數就是這個指定 03/25 16:13
→ LPH66:當不指定時通常會取用我所寫的 system default charset 03/25 16:15
→ LPH66:所以這部份很多人並不會去注意到, 因為已經這樣處理掉了 03/25 16:18
→ Lordaeron:你還是回一下我的問題吧. 03/25 16:27
→ danny8376:用big5 你要的編碼 <= 這就是encoding參數 懂? 03/25 17:51
推 LPH66:咦, 我以為我在二樓已經回了你的問題了...看來是我語焉不詳 03/26 02:26
→ LPH66:我應該要詳細說"你問的encoding參數就是這回文中所提到的 03/26 02:28
→ LPH66:「用你指定的big5」這個指定" 這樣才不會被忽略過去... 03/26 02:30
→ adrianshum:Java 中 "字串" 的編碼永遠是 UTF-16. Period. 03/30 22:28
→ adrianshum:Lordaeron 建議還是去看一些基礎的文章之類,搞清楚 03/30 22:30
→ adrianshum:byte & char 在 Java 中的概念。 03/30 22:31