2005年9月13日 星期二

終於把Java client 的UTF-8搞定了

原本把系統從Big5改為UTF-8的時候犯了一個小錯誤,對於JVM內部的String結構有所誤解

,以為可指定charset,所以一直都在
new String(byte[], charset)
上面打轉。
後來把Java Tutorial裡面相關的i18n的章節又看了一次,才發現原來問題出在input/output stream。只要把系統的出入口搞定了,內部的String表現全部都是unicode,也就不存在charset轉換的問題了。這下子也一併解決了BlueStone+Dom4j原本不能處理按鈕使用UTF-8的問題了。
目前只剩下一個問題,也就是DOM DocumentBuilder利用ByteArrayInputStream讀入一個ByteArray的時候,這個ByteArray如果先利用 getBytes("UTF-8")把非法的UTF-8 character 拿掉的話,就不容易發生SAXException。但是如果僅使用getBytes的話,可能因為docString裡面含有非法的UTF-8字元,造成client death。我認為的解法應該是把document好好重建一次,這樣對於整體程式碼來說,是比較健康的。

沒有留言:

張貼留言