編碼傳輸

老實講問題蠻低等的,但以前也從來沒用心了解過相關問題,有過就好...
問題:
發生瀏覽器端編輯新造字內容,透過server side 下載到終端設備的字元編碼有問題。
因為規範上設備接受的編碼是big5 ,所以做了ex:"wtf:編碼".getBytes(Charset.forName("big5"))的處理
理論上最後一個字應該要解成fa42 卻變成3f,也就是變成?而不是方塊字。

 線索:
  1.  理論上BIG5的保留字區域在UTF8也有對應的區域
  2. 據前端人員所說,就算有安裝該新造字的電腦也只有使用IE才能正常顯示該文字
  3. 從database直接複製文字到文字編輯器跟IDE都不會變成?,頂多變成方塊
解法
  1. 有人說了一句改成MS950,就轉換成功了...
根據解法查詢問題來源
  1. 既然新造字區域在這兩種編碼都有,為什麼轉過去就會不見。就算不能正常顯示,字元也應該要保持完整
    根據官網 java Supported Encodings
    光搜尋Big5就有以下這幾種
    Big5,
    Big5-HKSCS
    x-Big5-Solaris,Solaris zh_TW.BIG5
    看敘述跟實際使用的狀況研判,只輸入Big5 Encodings 的版本是最原始的1984版本
    並沒有使用者造字區和新常用字(FA40 - FEFE),所以才會轉換失敗
結論
嘗試過換了幾種可支援使用者造字區的Big5版本,也可以轉換編碼成功。
看起來如果再遇到轉換問題,輸出端跟輸入端都要確定使用的Encodings版本,比較不會中招。
後記
因為部分設備存放的中文字內容,使用BIG5無法顯示人看得懂的內容。
故嘗試切換編碼解析,但是切換成big5系列跟utf8都不能顯示。
我想既然來源是為了顯示中文字 ,應該不會用西洋語系的編碼。
故往BOM 檔的方向測試,一使用 x-UTF-16LE-BOM就顯示正常。
我想大概是之前的winows application 在這部分也沒特別注意編碼吧...
題外話
為了避免UnsupportedEncodingException一直以來都是使用
Charset.forName("UTF8") or guava charsets
這次才發現JDK 7就有了這玩意兒...

import java.nio.charset.StandardCharsets
StandardCharsets.UTF_8





留言

熱門文章

汐科定便當記錄(一)

汐科定便當記錄 (完)

ireport換行