JAVA 如何使用Java Excel API(JXL) 輸出法文特殊字母
經過查了許多網友寫的文章,最後測試出來,解決了此問題,把幾個需要注意的地方記錄下來
1. JAVA 本身是支援unicode , UTF-8 這些都是沒有問題的,主要就是Javac 指令編譯的時候,要加上 –encoding 參數,指定為UTF-8 ,否則Java 預設會使用作業系統的編碼(繁體中文版,編碼是MS950 ),但有幾個配合的部份也要注意才能成功
2. 在字元集編碼的部份,雖然法文特殊字母如a e 這些重音的字母,在ISO-8859-1 是沒有支援,ISO-8859-15 我看wiki 的說明,應該是有納入這些特殊字母,但是我用–encoding ISO-8859-15,輸出的結果還是會變亂碼,只有UTF-8 沒有問題
3. 第一關在程式Source code 編輯的時候,編輯器本身有沒有支援unicode, UTF-8 就是一個問題,我使用的Oracle JDeveloper 10的預設編碼是MS950 ,雖然可以選UTF-8 ,但是測試結果還是不行,可能是它預設的javac 指令還是用MS950 ,而我又找不到可以改Javac encoding的地方
4. 記事本notepad 存檔的編碼預設是ANSI ,是可以選UTF-8 ,而我後來到一個不錯的編輯文字軟體,Notepad ++ ,在工具列可以指定Encoding ,而要注意的是,UTF-8 又有分UTF-8 和UTF-8 without BOM ,必須是UTF-8 在compile 的時候比較不會有問題
5. 什麼是BOM ,參考一下網友的說明
『如果你曾經使用Java遇過讀一些文字檔前面出現??等亂碼的話, 表示該份文件有加入bom(byte order mark), 基本上bom的用途原本是用來讓程式辨別該份文檔的編碼格式, Microsoft在Windows 2000以後的Notepad存UTF-8的檔案會加上 BOM(Byte Order Mark, U+FEFF), 主要是因為UTF-8和ASCII是相容的, 為了避免使用者自己忘記用甚麼存, 造成UTF-8檔案用 ASCII 模式開看到是亂碼, 所以在檔案最前面加上BOM.』
http://samsharehome.blogspot.com/2009/01/utf-8-bominputstreamreader.html
6. 有網有說只要在Java 程式碼裡面指定編碼方式
System.setProperty("jxl.encoding", "UTF-8");
System.setProperty("file.encoding", " UTF-8");
可以解決亂碼問題,但是我測試是不行,如果不是在Javac 指定 –encoding 為UTF-8 ,輸出結果還是會變成亂碼
7. 如果使用cmd 指令,開啟DOS 視窗,在Java 程式裡面直接輸出文字到DOS 視窗這樣子測試的話,就算使用Javac –encoding UTF-8 怎麼測都不能顯示出特別字母,有人說用CHCP 65001 把字元集改為UTF-8 ,但是我測試也是不行
8. 我最後就是使用Notepad ++軟體,把encoding 改成UTF-8 , 存檔,在 dos命令視窗下用Javac –encoding UTF-8 ,最後解決了特殊字母問題
9. 一些不錯的網友文章參考
不錯用的文字與程式編輯器軟體
NOTEPAD ++
http://phonchi.blogspot.com/2010/07/notepad.html
jxl 蠻完整的範例
http://kickjava.com/src/jxl/demo/Write.java.htm
JAVA編碼測試大全
http://java.fromtw.com/java/java_char_encode.html
Java繁體中文處理完全攻略(一)
http://niklas.pixnet.net/blog/post/1224755
ISO/IEC 8859-1 Wiki
http://zh.wikipedia.org/zh-tw/ISO/IEC_8859-1
ISO/IEC 8859-15 Wiki
http://zh.wikipedia.org/zh-tw/ISO/IEC_8859-15
UTF-8 Wiki
http://zh.wikipedia.org/wiki/UTF-8