2011年8月21日 星期日

指定Rhino環境的DOS視窗編碼格式

Rhino環境下,使用print()函數會將訊息輸出至DOS的console視窗,在上一篇「Rhino原始碼使用UTF-8編碼格式儲存與執行」執行的結果中,雖然將訊息顯示在console視窗,但顯示結果已變成亂碼。
回頭再看一遍「JVM 預設編碼」這篇文章,雖然藉由"-Dfile.encoding"指定JVM預設編碼,讓"UTF-8"編碼格式的JavaScript檔案可以被載入與執行,但同時也將輸出至console視窗的編碼也指定成"UTF-8"編碼格式,造成顯示結果變成亂碼。而在「JVM 預設編碼」內容也提到解決辦法,不過之前沒把整篇文章看懂,所以只解決一半的問題。
詳細的說明請參考「JVM 預設編碼」,該文寫的比較清楚,就不再重貼了。針對自己之前遇到的問題,其實就是要再加上指定console視窗的編碼格式,修改後的程式碼如下:
/**
 *
 * Rhino字元編碼。
 *
 * @author ace
 *
 * @version 2011/08/03 v0.1
 *
 * @see <a href="http://www.mozilla.org/rhino/ScriptingJava.html">Scripting Java</a>
 * @see <a href="https://developer.mozilla.org/en/Scripting_Java">Scripting Java</a>
 * @see <a href="https://developer.mozilla.org/en/JavaScript/Reference/Statements/try...catch">try...catch</a>
 * @see <a href="http://www.javascriptkit.com/javatutors/trycatch.shtml">Handling runtime errors in JavaScript using try/catch/finally</a>
 *
 * @see <a href="http://caterpillar.onlyfun.net/Gossip/Encoding/UnicodeUTF.html">Unicode 與 UTF</a>
 * @see <a href="http://caterpillar.onlyfun.net/Gossip/Encoding/UTF8.html">UTF-8</a>
 *
 * @description
 *
 */

// 設定console視窗輸出資料為Big5編碼格式。 
java.lang.System.setOut(new java.io.PrintStream(java.lang.System.out, true, "BIG5"));

try {
    // 開始執行程式
    print("Rhino script start running...");
    print("顯示測試資料!");
    print("阿堃!");
}
catch (e) {
    print("執行過程有誤,錯誤訊息:" + e.description);
}
finally {
}

其實就是補上第22行,設定console視窗輸出資料為Big5編碼格式(測試環境為Windows XP作業系統)。執行的結果如下圖所示:

除了「堃」字無法顯示(這是正常的,"BIG5"編碼範圍內本就沒有這個中文字),其它中文字已經可以正常的顯示了。
終於~大功告成~

沒有留言:

張貼留言

Related Posts Plugin for WordPress, Blogger...