java中文字符轉碼的思考

筆者最近所做的一個程序其中一部分與一個已經存在的xml解析器相關,在解析的過程中發現很多中文值都無法正確應用(反編譯xml解析器後發現需要的格式是UTF-8),需要轉換字符串成UTF-8格式編碼的。我在網上找過很多文章和其他資料,但是都無法解決問題。後來發現了一個方法,總算是初步解決了一些問題,現在總結一下,與大家分享.

很多文章和文檔中介紹的方法: String s = new String(name.getBytes(“ISO8859_1”),” GB2312”);

這個方法 並不能正確解決中文的編碼問題,稍微分析一下就知道:name是一個String,使用了getBytes(“ISO8859_1”),之後將獲得一個字節數組,這個數組是與ISO8859_1編碼相對應的,也就是說,再將這個字節數組用"ISO8859_1"再次組裝成一個string時是能正確顯示字符的。大家都知道,不同的編碼實現的方法是不一樣的,這裏使用了iso-8859-1編碼方式解開字符串成byte[],卻以GB2312方式來組裝,是有問題的,中文是不能正確處理的,大家可以試着用一箇中英文混合的字符串來代替name,再打印一下看看結果,中文都變成了問號。

我操作的xml解析器需要的是一個輸入流,先前使用StringBufferInputStream(String s)創建字節流的方法沒有成功,後來我將一串字符串以UTF-8格式解開成byte[] 後輸出到磁盤上保存,再次使用時就用這種文件以FileInputStream的方式送入解析器,果然都能正確了,由於此方法不支持reset(),所以我使用了new ByteArrayInputStream(stringContent.getBytes("UTF-8"))創建新的流,獲得了比較好的效果。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章