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