From: Svata D. <ga...@vo...> - 2019-09-15 19:09:56
|
Hi, A project I am using utilizes Jython for scripting; invokes Jython using JSR 223 Stripting API: ScriptEngine engine = ... ; // obtain ScriptingEngine instance try (FileReader fr = new FileReader(file)) { return engine.eval(fr, context); } The file can script UI, so localized Strings (literals) may appear in the script file. Unless the entire application's default encoding *happens* to be correct (so that FileReader uses the correct one) + *all* the scripts use the encoding, the script text is naturally misread and national characters are garbled. When executing the file through PythonInterpreter.execfile(), one can declare encoding in the file explicitly: # coding=iso-8859-2 but that's not an option with ScriptEngine - the following error is thrown: javax.script.ScriptException: org.python.antlr.ParseException: org.python.antlr.ParseException: encoding declaration in Unicode string I sort of understand that, since the passed Reader should have already decoded the representation. Sadly if I have scripts that can be invoked (also) by other scripts, those scripts HAVE to contain #coding directive for execfile() call in Python script. Given the exception above, they cannot be invoked directly from Java using JSR223 APIs. How to solve that situation ? I can naturally provide a clever Reader that reads top of the file according to PEP-263 and then passes a Reader that decodes the source correctly. But that would have to be replicated in other apps using JSR-223 API _and_ entangles the project with Python-specific processing, which does not seem "right". Is there a more appropriate solution for this issue ? Thanks for the help, -Svata |