There is an evergreen problem how to read Java properties from UTF-8 files. The source file should be ISO 8859-1 oriented and even overmighty Hercules cannot contend that.
Solution
But I found simply method which works for me. Just read a file in standard way, change all characters above 128 to Unicode escaped sequence and push through Properties.load method. Source file is available here.
public class ReadUTF8Properties {
private static String getFileContent(String name) throws IOException {
// does not work in Google App Engine, use Guava goodies
// return new String(Files.readAllBytes(Paths.get(name)));
return Files.toString(new File(name), Charsets.UTF_8);
}
private static String toLatin1(String s) {
StringBuilder b = new StringBuilder();
for (char c : s.toCharArray()) {
if (c >= 256 && c < 1000)
// 3 digits, add one leading 0
b.append("\\u0").append(Integer.toHexString(c));
else if (c >= 1000)
// 4 digits
b.append("\\u").append(Integer.toHexString(c));
else
b.append(c);
}
return b.toString();
}
public static Properties readProperties(String propName) throws IOException {
Properties prop = new Properties();
String p = toLatin1(getFileContent(propName));
prop.load(new StringReader(p));
return prop;
}
}




