分類が面倒なので Rhino タグを付けたものの Rhino本体 じゃなくて jrunscript…でもなくて jrunscriptのJavaScript組み込み関数 というのが正しいんでしょうか。。
// foo.js (UTF-8) load("bar.js");
// bar.js (UTF-8) println("集");
で foo.js を実行すると -encoding オプションを指定していても次のエラーが出る。
C:\Users\hoge>jrunscript -encoding UTF-8 foo.js script error in file foo.js : sun.org.mozilla.javascript.internal.WrappedException: Wrapped javax.script.ScriptException : sun.org.mozilla.javascript.internal.EvaluatorException: unterminated string literal (bar.js#1) in bar.js at line numbe r 1 (#312) in at line number 312
load がエンコーディングを考慮してないようだったので、
C:\Users\hoge>jrunscript js> load.toString(); function load(str) { var stream = inStream(str); var bstream = new BufferedInputStream(stream); var reader = new BufferedReader(new InputStreamReader(bstream)); var oldFilename = engine.get(engine.FILENAME); engine.put(engine.FILENAME, str); try { engine.eval(reader); } finally { engine.put(engine.FILENAME, oldFilename); streamClose(stream); } }
次のようにエンコーディングを指定するようにした。
function _load(str, encoding) { // ... var reader = new BufferedReader(new InputStreamReader(bstream, encoding)); // ... } // example _load("bar.js", "UTF-8");
バージョン:
C:\Users\hoge>jrunscript -q Language ECMAScript 1.8 implemention "Mozilla Rhino" 1.7 release 3 PRERELEASE