[爆卦]big 5轉換是什麼?優點缺點精華區懶人包

為什麼這篇big 5轉換鄉民發文收入到精華區:因為在big 5轉換這個討論話題中,有許多相關的文章在討論,這篇最有參考價值!作者darkk6 (Mr. Pan)看板java標題Re: [問題] big5轉utf8時間Wed ...


※ 引述《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)
danny8376:推詳解www 03/26 17:42
swpoker:我高中沒教阿 03/27 09:03
summerleaves:高中沒教 +1 可能是年紀大了一點 03/28 10:57
PsMonkey:高中的時候,倚天中文還是先進產品 (艸 03/28 11:18
Lordaeron:我認為, 是你們讀的學校不同的關係. 03/28 11:30
Lordaeron:高中就學完search and sort,會寫簡單的GAME的很多. 03/28 11:32
darkk6:這篇主題是不是變了啊 XDD 03/28 18:25
kiwatami:請問darkk6大大是用哪種IDE開發啊? 要改什麼設定才可以在 03/29 22:04
kiwatami:console同時顯示big5跟utf-8的文字? 03/29 22:06
darkk6:並沒有同時顯示 UTF8 和 Big5 阿 @@ 我哪裡有說XDDDD 03/30 08:52
kiwatami:我沒有質疑你的意思啦XD 只是最近我也在搞編碼 03/30 10:14
kiwatami:非utf-8都會顯示成亂碼 很難debug 03/30 10:18
darkk6:我知道啦XD 是想說我沒提到我在IDE有用兩種編碼 XD 03/30 15:35

你可能也想看看

搜尋相關網站