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; } }
Brak komentarzy:
Prześlij komentarz