[問題] 編碼轉換問題(BIG5轉UTF8)

看板java作者 (阿丐哦哪個丐)時間7年前 (2017/01/14 13:19), 編輯推噓2(2011)
留言13則, 3人參與, 最新討論串1/1
各位前輩午安,最近在製作專案時遇到編碼轉換問題... 詳情如下: 本身的servlet要呼叫一支API,而該api會回傳xml格式字串, 但對方API的系統編碼是BIG5,而我的系統是UTF8...... 不知道是不是因為這個原因導致回傳字串的中文部分變成很多菱形的亂碼, 爬文結果多半與getByte function有關, 但試了相關的語法只讓菱形變成問號而已。 請問各位大大能否提供類似問題的解法? 感激不盡QQQ -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.164.56.101 ※ 文章網址: https://www.ptt.cc/bbs/java/M.1484371143.A.F40.html

01/14 14:58, , 1F
在讀對方資料時 先用big5,接著再用utf8來編碼
01/14 14:58, 1F

01/14 15:45, , 2F
String是沒有編碼的(先不管怎麼存在記憶體的),重點要放在
01/14 15:45, 2F

01/14 15:45, , 3F
binary資料的編碼,對方系統編碼是BIG5,代表的是對方傳出
01/14 15:45, 3F

01/14 15:47, , 4F
時是String → byte[] (BIG5編碼),所以你在收資料時,取得
01/14 15:47, 4F

01/14 15:47, , 5F
byte[]後直接用BIG5解碼回String就好,跟你自己的UTF-8沒關
01/14 15:47, 5F

01/14 15:48, , 6F
如果是先讀byte[]再轉String就是new String時設定
01/14 15:48, 6F

01/14 15:48, , 7F
如果是用Reader讀Stream,那就是設Reader的編碼
01/14 15:48, 7F

01/14 15:51, , 8F
你會菱形又變問號大概是兩個編碼不懂狀況轉來轉去,不要想
01/14 15:51, 8F

01/14 15:53, , 9F
太複雜...
01/14 15:53, 9F

01/14 18:23, , 10F
Java 處理編碼事情已經很單純了, byte[] 就是外界編碼
01/14 18:23, 10F

01/14 18:24, , 11F
轉成 String 需要提供編碼, 它就會變成 Unicode 字串
01/14 18:24, 11F

01/14 18:24, , 12F
要再送出去時再變回 byte[], 這裡也要再給一次編碼
01/14 18:24, 12F

01/14 18:24, , 13F
至於你的系統是 UTF-8 這件事和 Java 無關
01/14 18:24, 13F
文章代碼(AID): #1OURJ7z0 (java)