Skip to content

Commit

Permalink
Use Charset.defaultCharset instead the file.encoding property
Browse files Browse the repository at this point in the history
The file.encoding property could have an invalid encoding name because it is
not normalized, as opposed to Charset.defaultCharset which is.
  • Loading branch information
jvshahid committed Apr 21, 2019
1 parent 0ed37e2 commit b089768
Showing 1 changed file with 4 additions and 15 deletions.
19 changes: 4 additions & 15 deletions ext/java/nokogiri/internals/NokogiriHelpers.java
Original file line number Diff line number Diff line change
Expand Up @@ -670,27 +670,16 @@ public static String getValidEncodingOrNull(Ruby runtime, IRubyObject encoding)
}

public static String getValidEncoding(Ruby runtime, IRubyObject encoding) {
if (encoding.isNil()) {
return guessEncoding();
} else {
return ignoreInvalidEncoding(runtime, encoding);
String validEncoding = getValidEncodingOrNull(runtime, encoding);
if (validEncoding != null) {
return validEncoding;
}
}

private static String guessEncoding() {
String name = System.getProperty("file.encoding");
if (name == null) name = "UTF-8";
return name;
return Charset.defaultCharset().name();
}

private static Set<String> charsetNames = Charset.availableCharsets().keySet();

private static String ignoreInvalidEncoding(Ruby runtime, IRubyObject encoding) {
String givenEncoding = rubyStringToString(encoding);
if (charsetNames.contains(givenEncoding)) return givenEncoding;
else return guessEncoding();
}

public static String adjustSystemIdIfNecessary(String currentDir, String scriptFileName, String baseURI, String systemId) {
if (systemId == null) return systemId;
File file = new File(systemId);
Expand Down

0 comments on commit b089768

Please sign in to comment.