Re: [問題] big5轉utf8

作者: darkk6 (Mr. Pan)   2014-03-26 13:33:58
※ 引述《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 , 和文字本身無關,參考

接著我們各自使用正確的編碼建立 Big5 和 UTF8 的文字,利用
codePointAt 取得文字的編碼(16 進位),可以發現無論是從 Big5 或者 UTF-8
編碼而來的文字,到 java 裡面都是 Unicode 的方式儲存
http://ideone.com/RwF0c8
"哈" = 0x54C8
Client 儲存
=> 轉換後準備送出
作者: danny8376 (釣到一隻猴子@_@)   2014-03-26 17:42:00
推詳解www
作者: swpoker (swpoker)   2014-03-27 09:03:00
我高中沒教阿
作者: summerleaves (內湖全聯先生)   2014-03-28 10:57:00
高中沒教 +1 可能是年紀大了一點
作者: PsMonkey (痞子軍團團長)   2014-03-28 11:18:00
高中的時候,倚天中文還是先進產品 (艸
作者: Lordaeron (Terry)   2014-03-28 11:30:00
我認為, 是你們讀的學校不同的關係.高中就學完search and sort,會寫簡單的GAME的很多.
作者: darkk6 (Mr. Pan)   2014-03-28 18:25:00
這篇主題是不是變了啊 XDD
作者: kiwatami (悠游自在)   2014-03-29 22:04:00
請問darkk6大大是用哪種IDE開發啊? 要改什麼設定才可以在console同時顯示big5跟utf-8的文字?
作者: darkk6 (Mr. Pan)   2014-03-30 08:52:00
並沒有同時顯示 UTF8 和 Big5 阿 @@ 我哪裡有說XDDDD
作者: kiwatami (悠游自在)   2014-03-30 10:14:00
我沒有質疑你的意思啦XD 只是最近我也在搞編碼非utf-8都會顯示成亂碼 很難debug
作者: darkk6 (Mr. Pan)   2014-03-30 15:35:00
我知道啦XD 是想說我沒提到我在IDE有用兩種編碼 XD

Links booklink

Contact Us: admin [ a t ] ucptt.com