Big5轉UTF8的方式在數年前就自O'Reilly的Java IO一書學會了,但至今還是犯下相似的錯誤。本來以為可以藉用StringReader將Big5編碼的String轉成Stream再轉換到UTF8,甚至妄想以為不須指定來源編碼。事實上還是要中規中矩的把String轉成Byte Array,再轉成Stream時指定其來源編碼。

public static void main(String[] args) throws Exception
{
    BufferedReader br = new BufferedReader(
        new InputStreamReader(new FileInputStream("./B.xml"), "Big5"));     //檔案

        // new InputStreamReader(new ByteArrayInputStream(str.getBytes(), "Big5")); //字串
    PrintWriter pw = new PrintWriter(
        new OutputStreamWriter(new FileOutputStream("./B2.xml"), "UTF8"));
    String line = br.readLine();
    while (line != null) {
        System.out.println(line);
        pw.write(line);
        line = br.readLine();
    }
    pw.flush();
    pw.close();
}

  Survey期間也發現幾個有趣及易犯錯的地方。比如XML若指定UTF-8編碼:<?xml version="1.0" encoding="UTF-8"?>,不能用UTF8。還有以下三種取得系統編碼方式,結果還真的都不太一樣:

logger.debug("Encoding:{}", System.getProperty("file.encoding")); // ISO8859-1
logger.debug("Charset:{}", Charset.defaultCharset().name());      // ISO-8859-1
logger.debug("OutputStream:{}", (new OutputStreamWriter(System.out)).getEncoding()); // ISO8859_1

arrow
arrow
    全站熱搜

    Jemmy 發表在 痞客邦 留言(0) 人氣()