Re: [問題] big5轉utf8

看板java作者 (Mr. Pan)時間10年前 (2014/03/26 13:34), 編輯推噓6(607)
留言13則, 7人參與, 最新討論串8/8 (看更多)
※ 引述《del680202 (HANA)》之銘言: : 有試著爬過文,但是沒找到解法 : 最近要做資料傳遞 : 但是問題是server端是utf-8的編碼環境 : 而client是big5的編碼環境 : 現在策略是client端統一把資料轉utf-8文字傳過去 : 我試著估狗,但是找到的答案都是用getBytes方式去轉 : 可是我實際測試了儘管用getBytes去拿到utf-8文字 : 他也只是假性當作utf-8,骨子裡還是big5文字 錯~ 骨子裡是一連串的 bytes 資料 傳送資料的時候都是用 byte , 所以無論如何請將資料以 byte 來看待 我們知道文字的編碼是一種規範(參考高中資訊課程第二章) 變成版標了 \OwO/ , 重新翻了一下課本應該是第一章啦 XD 大家耳熟能詳的就是 Big-5 UTF-8 Unicode GB... 資料要傳出去的時候是以 byte 進行傳送, 也就是根據文字的編碼決定 "轉成哪些 bytes" , 參考 http://ideone.com/PelQG4 範例中可以看到 "哈" 這個字的 Big-5 編碼是 AB A2 , UTF-8 為 E5 93 88 系統預設和 UTF-8 相同就表示這個系統的預設編碼是 UTF-8 PS : 系統指的是 OS , 作業系統,並非 Java 假設一個文字檔只有一個字 "哈" , 並且是以 Big-5 編碼儲存,就表示 其 Binary 內容是 AB A2 , 那麼,在不只定 Reader (或 InputStream) 讀取文字編碼的狀況下,使用系統預設(這邊假設是 UTF-8) , 會得到甚麼結果呢 ? 就會像這樣: http://ideone.com/wweTqe , 目前還不用去管在程式 裡面他用甚麼方式取儲存。 記住,資料傳輸都用 Bytes , 因此在讀取資料的時候,要根據你取得什麼樣子的 Bytes 去調整用甚麼方式來解釋他、 "看待" 他 至於送出的時候(我記得原PO是在做 socket ?),也要指定輸出的格式 一個字串 "哈" 儲存在程式裡面,現在要送出去的時候一樣需要轉換成 bytes 但這邊就遇到了編碼問題,要轉換成那些 bytes 送出? 是 AB A2 還是 E5 93 88 ? 這就是在決定 getBytes("這裡") 要採用何種編碼。 如果我 Server 將文字以 Big-5 編碼送出,那麼就會送出 AB A2 兩個 bytes Client 把收到的資料指定用 Big-5 來 "看待" 的話,就可以正常地取出 "哈" 這個字了。 至於何謂 Java 裡面使用 Unicode ? 這就是上面我說目前不用去管的部分。 先看範例 : http://ideone.com/RjzhvU 從此例子中可以看到 "哈" 在 Unicode 裡面是 54 C8 ※ FE FF 稱為 BOM , 和文字本身無關,參考 http://ppt.cc/7KiZ 接著我們各自使用正確的編碼建立 Big5 和 UTF8 的文字,利用 codePointAt 取得文字的編碼(16 進位),可以發現無論是從 Big5 或者 UTF-8 編碼而來的文字,到 java 裡面都是 Unicode 的方式儲存 http://ideone.com/RwF0c8 "哈" = 0x54C8 Client 儲存 => 轉換後準備送出 -- Socket 傳送 --> 收到準備轉換 => Server 儲存 (指定 Big5) 54C8 => ABA2 ---- Socket 傳送 ----> ABA2 => 54C8 (指定 UTF-8) 54C8 => E59288 ---- Socket 傳送 ----> E59288 => 54C8 結論: 簡單來說請記得資料再傳送和讀寫,都以 Bytes 去想 話說有人提到 javac -encoding 的樣子 ? 這個 encoding 是指你的 Souce Code ( .java )是什麼編碼的文字檔 和執行時的編碼完全無關 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 210.60.161.229 ※ 文章網址: http://www.ptt.cc/bbs/java/M.1395812048.A.BFB.html ※ 編輯: darkk6 來自: 210.60.161.229 (03/26 16:28) ※ 編輯: darkk6 來自: 210.60.161.229 (03/26 16:31)

03/26 17:42, , 1F
推詳解www
03/26 17:42, 1F

03/27 09:03, , 2F
我高中沒教阿
03/27 09:03, 2F

03/28 10:57, , 3F
高中沒教 +1 可能是年紀大了一點
03/28 10:57, 3F

03/28 11:18, , 4F
高中的時候,倚天中文還是先進產品 (艸
03/28 11:18, 4F

03/28 11:30, , 5F
我認為, 是你們讀的學校不同的關係.
03/28 11:30, 5F

03/28 11:32, , 6F
高中就學完search and sort,會寫簡單的GAME的很多.
03/28 11:32, 6F

03/28 18:25, , 7F
這篇主題是不是變了啊 XDD
03/28 18:25, 7F

03/29 22:04, , 8F
請問darkk6大大是用哪種IDE開發啊? 要改什麼設定才可以在
03/29 22:04, 8F

03/29 22:06, , 9F
console同時顯示big5跟utf-8的文字?
03/29 22:06, 9F

03/30 08:52, , 10F
並沒有同時顯示 UTF8 和 Big5 阿 @@ 我哪裡有說XDDDD
03/30 08:52, 10F

03/30 10:14, , 11F
我沒有質疑你的意思啦XD 只是最近我也在搞編碼
03/30 10:14, 11F

03/30 10:18, , 12F
非utf-8都會顯示成亂碼 很難debug
03/30 10:18, 12F

03/30 15:35, , 13F
我知道啦XD 是想說我沒提到我在IDE有用兩種編碼 XD
03/30 15:35, 13F
文章代碼(AID): #1JCcRGlx (java)
討論串 (同標題文章)
文章代碼(AID): #1JCcRGlx (java)