Skip to content

Commit 8c427ae

Browse files
committed
[GR-24013] Fix sys.getfilesystemencoding
PullRequest: graalpython/1055
2 parents 8f01312 + 375154f commit 8c427ae

File tree

2 files changed

+16
-3
lines changed

2 files changed

+16
-3
lines changed

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/modules/SysModuleBuiltins.java

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,8 @@
5151
import java.util.Date;
5252
import java.util.List;
5353

54+
import org.graalvm.nativeimage.ImageInfo;
55+
5456
import com.oracle.graal.python.PythonLanguage;
5557
import com.oracle.graal.python.builtins.Builtin;
5658
import com.oracle.graal.python.builtins.CoreFunctions;
@@ -82,6 +84,7 @@
8284
import com.oracle.graal.python.runtime.PythonOptions;
8385
import com.oracle.graal.python.runtime.exception.PException;
8486
import com.oracle.graal.python.runtime.object.PythonObjectFactory;
87+
import com.oracle.graal.python.util.CharsetMapping;
8588
import com.oracle.graal.python.util.OverflowException;
8689
import com.oracle.graal.python.util.PythonUtils;
8790
import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
@@ -97,8 +100,6 @@
97100
import com.oracle.truffle.api.library.CachedLibrary;
98101
import com.oracle.truffle.api.profiles.ConditionProfile;
99102

100-
import org.graalvm.nativeimage.ImageInfo;
101-
102103
@CoreFunctions(defineModule = "sys")
103104
public class SysModuleBuiltins extends PythonBuiltins {
104105
private static final String LICENSE = "Copyright (c) Oracle and/or its affiliates. Licensed under the Universal Permissive License v 1.0 as shown at http://oss.oracle.com/licenses/upl.";
@@ -413,7 +414,10 @@ public abstract static class GetFileSystemEncodingNode extends PythonBuiltinNode
413414
@Specialization
414415
@TruffleBoundary
415416
protected String getFileSystemEncoding() {
416-
return System.getProperty("file.encoding");
417+
String javaEncoding = System.getProperty("file.encoding");
418+
String pythonEncoding = CharsetMapping.getPythonEncodingNameFromJavaName(javaEncoding);
419+
// Fallback on returning the property value if no mapping found
420+
return pythonEncoding != null ? pythonEncoding : javaEncoding;
417421
}
418422
}
419423

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/util/CharsetMapping.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@
5555
public class CharsetMapping {
5656
private static final Map<String, Charset> JAVA_CHARSETS = new HashMap<>();
5757
private static final Map<String, String> CHARSET_NAME_MAP = new HashMap<>();
58+
private static final Map<String, String> CHARSET_NAME_MAP_REVERSE = new HashMap<>();
5859

5960
@TruffleBoundary
6061
public static Charset getCharset(String encoding) {
@@ -65,6 +66,11 @@ public static Charset getCharset(String encoding) {
6566
return null;
6667
}
6768

69+
@TruffleBoundary
70+
public static String getPythonEncodingNameFromJavaName(String javaEncodingName) {
71+
return CHARSET_NAME_MAP_REVERSE.get(javaEncodingName.toLowerCase());
72+
}
73+
6874
public static String normalize(String encoding) {
6975
return encoding.toLowerCase(Locale.ENGLISH).replaceAll("[^\\w.]+", "_");
7076
}
@@ -84,6 +90,9 @@ private static Charset getJavaCharset(String name) {
8490

8591
private static void addMapping(String pythonName, String javaName) {
8692
CHARSET_NAME_MAP.put(normalize(pythonName), javaName);
93+
if (javaName != null) {
94+
CHARSET_NAME_MAP_REVERSE.put(javaName.toLowerCase(), pythonName.replace('_', '-'));
95+
}
8796
}
8897

8998
private static void addAlias(String alias, String pythonName) {

0 commit comments

Comments
 (0)