UTF-8 кодирует строку Java в свойствах
У меня есть одна закодированная строка UTF-8, которая представляет собой цепочку пар ключ + значение, которая требуется для загрузки в объект Properties. Я заметил, что у меня были искаженные персонажи с моей внутренней реализацией, и после небольшого количества поисковых запросов я нашел этот Question, который указывал на мою проблему: в основном это свойство по умолчанию используя 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;
}
Никакая кодировка не указана, поэтому моя проблема. На мой вопрос, я не могу понять, как связать/создать комбинацию Reader
/InputStream
, чтобы перейти к Properties.load()
, которая использует предоставленный propertiesString
и указывает кодировку. Я думаю, что это в основном из-за моей неопытности в потоках ввода-вывода и, казалось бы, обширной библиотеки IO-утилит в пакете java.io.
Любые советы приветствуются.
Ответы
Ответ 1
Используйте Reader
при работе со строками. InputStream
действительно предназначены для двоичных данных.
public Properties load(String propertiesString) {
Properties properties = new Properties();
properties.load(new StringReader(propertiesString));
return properties;
}
Ответ 2
Попробуйте следующее:
ByteArrayInputStream bais = new ByteArrayInputStream(propertiesString.getBytes("UTF-8"));
properties.load(bais);
Ответ 3
private Properties getProperties() throws IOException {
ClassLoader classLoader = getClass().getClassLoader();
InputStream input = classLoader.getResourceAsStream("your file");
InputStreamReader inputStreamReader = new InputStreamReader(input, "UTF-8");
Properties properties = new Properties();
properties.load(inputStreamReader);
return properties;
}
то использование
System.out.println(getProperties().getProperty("key"))