UTF-8将Java字符串编码为属性

UTF-8将Java字符串编码为属性,java,utf-8,properties,io,Java,Utf 8,Properties,Io,我有一个UTF-8编码的字符串,它是一个键+值对链,需要加载到Properties对象中。我注意到我的初始实现中出现了乱码,在谷歌搜索了一段时间后,我发现了这一点,这表明了我的问题所在——基本上属性默认使用ISO-8859-1。这个实现看起来像 public Properties load(String propertiesString) { Properties properties = new Properties(); try { p

我有一个UTF-8编码的字符串,它是一个键+值对链,需要加载到Properties对象中。我注意到我的初始实现中出现了乱码,在谷歌搜索了一段时间后,我发现了这一点,这表明了我的问题所在——基本上属性默认使用ISO-8859-1。这个实现看起来像

public Properties load(String propertiesString) {
        Properties properties = new Properties();
        try {
            properties.load(new ByteArrayInputStream(propertiesString.getBytes()));
        } catch (IOException e) {
            logger.error(ExceptionUtils.getFullStackTrace(e));
        }
        return properties;
    }
没有指定编码,因此我的问题。对于我的问题,我不知道如何链接/创建一个
读取器
/
输入流
组合,以传递给
属性。load()
使用提供的
属性字符串
并指定编码。我认为这主要是因为我在I/O流方面缺乏经验,而且java.IO包中似乎有大量的IO实用程序库

非常感谢您的建议。

使用字符串时请使用。s实际上是用于二进制数据的

public Properties load(String propertiesString) {
    Properties properties = new Properties();
    properties.load(new StringReader(propertiesString));
    return properties;
}
试试这个:

ByteArrayInputStream bais = new ByteArrayInputStream(propertiesString.getBytes("UTF-8"));
properties.load(bais);
然后使用

System.out.println(getProperties().getProperty("key"))

该构造函数不存在。谢谢,我签出了,但我没有看到这样的构造函数。干杯,Matt,刚刚成功尝试了这个解决方案。最初没有使用StringReader,因为我在寻找对编码的控制时遇到了麻烦。非常感谢你的帮助。我的朋友,不客气。很抱歉,一开始我将您指向了一个不存在的构造函数。为了支持比Android-9旧的Android SDK,我不得不使用它而不是
StringReader
System.out.println(getProperties().getProperty("key"))