Ответ 1
Используйте InputStreamReader
с Properties.load(Reader reader)
:
FileInputStream input = new FileInputStream(new File("uinsoaptest.properties"));
props.load(new InputStreamReader(input, Charset.forName("UTF-8")));
Я читаю файл свойств, который состоит из сообщения в наборе символов UTF-8.
Проблема
Вывод не в соответствующем формате. Я использую InputStream
.
Файл свойств выглядит как
username=LBSUSER
[email protected]
url=http://localhost:1010/soapfe/services/MessagingWS
timeout=20000
message=Spanish character are = {á é í, ó,ú ,ü, ñ, ç, å, Á, É, Í, Ó, Ú, Ü, Ñ, Ç, ¿, °, 4° año = cuarto año, €, ¢, £, ¥}
И я читаю файл вот так,
Properties props = new Properties();
props.load(new FileInputStream("uinsoaptest.properties"));
String username = props.getProperty("username", "test");
String password = props.getProperty("password", "12345");
String url = props.getProperty("url", "12345");
int timeout = Integer.parseInt(props.getProperty("timeout", "8000"));
String messagetext = props.getProperty("message");
System.out.println("This is soap msg : " + messagetext);
Результат вышеприведенного сообщения:
Вы можете увидеть сообщение в консоли после строки
{************************ SOAP MESSAGE TEST***********************}
Я буду признателен, если смогу помочь, правильно прочитав этот файл. Я могу прочитать этот файл с другим подходом, но я ищу меньше кода модификации.
Используйте InputStreamReader
с Properties.load(Reader reader)
:
FileInputStream input = new FileInputStream(new File("uinsoaptest.properties"));
props.load(new InputStreamReader(input, Charset.forName("UTF-8")));
Используйте props.load(new FileReader("uinsoaptest.properties"))
вместо этого. По умолчанию используется кодировка Charset.forName(System.getProperty("file.encoding"))
, которая может быть установлена в UTF-8 с помощью System.setProperty("file.encoding", "UTF-8")
или с параметром командной строки -Dfile.encoding=UTF-8
.
Если кто-то использует аннотацию @Value, можно попробовать StringUils.
@Value("${title}")
private String pageTitle;
public String getPageTitle() {
return StringUtils.toEncodedString(pageTitle.getBytes(Charset.forName("ISO-8859-1")), Charset.forName("UTF-8"));
}
Вы должны указать кодировку UTF-8 при создании объекта FileInputStream. Вы можете использовать этот конструктор:
new FileInputStream("uinsoaptest.properties", "UTF-8");
Если вы хотите внести изменения в свою JVM, чтобы иметь возможность читать файлы UTF-8 по умолчанию, вам нужно будет изменить JAVA_TOOL_OPTIONS в ваших настройках JVM на что-то вроде этого:
-Dfile.encoding=UTF-8