import java.io.ByteArrayInputStream; import org.python.util.PythonInterpreter; /** * For manual tests, see Issue2073. * Compile with: *
* javac -cp [YOUR-PATH_TO-jython.jar] Issue2073Main.java ** Run with: *
* java -Dpython.home=[YOUR_PATH_TO-lib/jython] -cp .;[YOUR-PATH_TO-jython.jar] Issue2073Main **
* @author om */ public final class Issue2073Main { private static final String ENCODING = "utf-8"; /* * Try this instead. It works fine for \u00fb, since german o-umlaut is in iso-latin-1, * but not for \u20ac, since euro-symbol is not in iso-latin-1. * */ // private static final String ENCODING = "ISO-8859-1"; /** * \u00f6: german o-umlaut ('beautiful') */ private static final String STRING = "sch\u00f6n"; /* * Try this instead for a non-iso-latin-1 encodable character (euro-symbol) */ //private static final String STRING = "100,- \u20ac"; private Issue2073Main() { } /** useful for debugging: convert each character to hex. */ private static CharSequence chars2Hex(String val) { final StringBuilder ret = new StringBuilder(); for (int i = 0; i < val.length(); i++) { if (i != 0) { ret.append(':'); } ret.append(Integer.toHexString(val.charAt(i))); } return ret; } public static void javaPrint(String val) { System.out.println("javaPrint: " + val); System.out.println("java-hex: " + chars2Hex(val)); } private static void run() throws Exception { final PythonInterpreter interp = new PythonInterpreter(); final String input = "# -*- coding: " + ENCODING + " -*-" + "\nfrom org.python.core import codecs" + "\nimport Issue2073Main" + "\ncodecs.setDefaultEncoding('" + ENCODING + "')" + "\nprint '" + STRING + "'" + "\nprint 'python-hex:', ':'.join(x.encode('hex') for x in '" + STRING + "')" + "\nIssue2073Main.javaPrint('" + STRING + "')" ; System.out.println("Executing:\n" + input); System.out.println("--------------------------------------------"); final byte[] bytes = input.getBytes(ENCODING); final ByteArrayInputStream is = new ByteArrayInputStream(bytes); interp.execfile(is, "test-code"); System.out.println("--------------------------------------------"); System.out.println("expected output:"); javaPrint(STRING); } public static void main(String[] args) throws Exception { final String pythonHome = System.getProperty("python.home"); System.out.println("python home: " + pythonHome); run(); } }