diff --git a/CHANGELOG.md b/CHANGELOG.md index da8df871..6ced8c11 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,16 @@ FlatLaf Change Log - Tree and List: Fixed painting of rounded drop backgrounds. (issue #1023) +#### Incompatibilities + +- FlatLaf properties files are now loaded using the UTF-8 character encoding + instead of ISO 8859-1. In usual properties files you will not notice any + difference because they use only ASCII characters, but if you've put localized + (non-English) texts (e.g. German umlauts) into your properties files, you need + to convert them to UTF-8. Properties files created with the FlatLaf Theme + Editor already use UTF-8, including in older versions. (issue #1031) + + ## 3.6.1 - Extras: Support JSVG 2.0.0. Minimum JSVG version is now 1.6.0. (issue #997) diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/FlatPropertiesLaf.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/FlatPropertiesLaf.java index d16d1b96..36e3580e 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/FlatPropertiesLaf.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/FlatPropertiesLaf.java @@ -20,6 +20,9 @@ import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.Reader; +import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.Locale; import java.util.Properties; @@ -62,8 +65,8 @@ public class FlatPropertiesLaf throws IOException { Properties properties = new Properties(); - try( InputStream in2 = in ) { - properties.load( in2 ); + try( Reader reader = new InputStreamReader( in, StandardCharsets.UTF_8 )) { + properties.load( reader ); } return properties; } diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/UIDefaultsLoader.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/UIDefaultsLoader.java index a2e614ec..b13906b5 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/UIDefaultsLoader.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/UIDefaultsLoader.java @@ -25,12 +25,15 @@ import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.Reader; import java.io.StreamTokenizer; import java.io.StringReader; import java.lang.reflect.Constructor; import java.lang.reflect.Executable; import java.lang.reflect.Method; import java.net.URL; +import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; @@ -112,6 +115,14 @@ class UIDefaultsLoader Set specialPrefixes = FlatLaf.getUIKeySpecialPrefixes(); return new Properties() { + @Override + public void load( InputStream in ) throws IOException { + // use UTF-8 to load properties file + try( Reader reader = new InputStreamReader( in, StandardCharsets.UTF_8 )) { + super.load( reader ); + } + } + @Override public synchronized Object put( Object k, Object value ) { // process key prefixes (while loading properties files) diff --git a/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatCompletionProvider.java b/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatCompletionProvider.java index 0bb400fb..d0395e1a 100644 --- a/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatCompletionProvider.java +++ b/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatCompletionProvider.java @@ -22,6 +22,7 @@ import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.StringReader; +import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.Collections; import java.util.HashSet; @@ -177,7 +178,7 @@ class FlatCompletionProvider try { try( InputStream in = getClass().getResourceAsStream( "/com/formdev/flatlaf/themeeditor/FlatLafUIKeys.txt" ) ) { if( in != null ) { - try( BufferedReader reader = new BufferedReader( new InputStreamReader( in, "UTF-8" ) ) ) { + try( BufferedReader reader = new BufferedReader( new InputStreamReader( in, StandardCharsets.UTF_8 ) ) ) { String key; while( (key = reader.readLine()) != null ) { if( !isIgnored( key ) ) diff --git a/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatThemeEditorPane.java b/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatThemeEditorPane.java index b256318b..e67972aa 100644 --- a/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatThemeEditorPane.java +++ b/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatThemeEditorPane.java @@ -23,6 +23,7 @@ import java.awt.Window; import java.awt.event.ActionEvent; import java.io.File; import java.io.IOException; +import java.nio.charset.StandardCharsets; import javax.swing.Action; import javax.swing.BorderFactory; import javax.swing.InputMap; @@ -211,7 +212,7 @@ class FlatThemeEditorPane void load( File file ) throws IOException { this.file = file; - textArea.load( FileLocation.create( file ), "UTF-8" ); + textArea.load( FileLocation.create( file ), StandardCharsets.UTF_8 ); } boolean reloadIfNecessary() { diff --git a/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatThemeFileEditor.java b/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatThemeFileEditor.java index 9340627a..d41267cd 100644 --- a/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatThemeFileEditor.java +++ b/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatThemeFileEditor.java @@ -39,6 +39,7 @@ import java.io.OutputStreamWriter; import java.io.Writer; import java.net.URI; import java.net.URISyntaxException; +import java.nio.charset.StandardCharsets; import java.time.Year; import java.util.ArrayList; import java.util.Arrays; @@ -675,7 +676,7 @@ class FlatThemeFileEditor { try( FileOutputStream out = new FileOutputStream( file ); - Writer writer = new OutputStreamWriter( out, "UTF-8" ); + Writer writer = new OutputStreamWriter( out, StandardCharsets.UTF_8 ); ) { writer.write( content ); } diff --git a/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatThemePropertiesBaseManager.java b/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatThemePropertiesBaseManager.java index ad2e0cfd..2f259b2b 100644 --- a/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatThemePropertiesBaseManager.java +++ b/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatThemePropertiesBaseManager.java @@ -19,6 +19,9 @@ package com.formdev.flatlaf.themeeditor; import java.io.File; import java.io.IOException; import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.Reader; +import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; @@ -109,8 +112,11 @@ class FlatThemePropertiesBaseManager String propertiesName = '/' + lafClass.getName().replace( '.', '/' ) + ".properties"; try( InputStream in = lafClass.getResourceAsStream( propertiesName ) ) { Properties properties = new Properties(); - if( in != null ) - properties.load( in ); + if( in != null ) { + try( Reader reader = new InputStreamReader( in, StandardCharsets.UTF_8 )) { + properties.load( in ); + } + } coreThemes.put( lafClass.getSimpleName(), properties ); } catch( IOException ex ) { ex.printStackTrace();