Это связано с кодировкой символов . Компьютеры занимаются только цифрами. Чтобы сохранить текст, символы в тексте должны быть преобразованы в номера и из них, используя некоторую схему. Эта схема называется кодировкой символов. Существует множество различных кодировок символов; некоторые из известных стандартных кодировок символов - ASCII, ISO-8859-1 и UTF-8.
В первом примере вы читаете все байты (числа) в файле, а затем преобразуете их в символов, передав их конструктору класса String
. Это будет использовать кодировку по умолчанию вашей системы (независимо от ее операционной системы) для преобразования байтов в символы.
Во втором примере, где вы используете Files.lines(...)
, символ UTF-8 кодирование будет использоваться, согласно документации . Когда в файле, который не является допустимой последовательностью UTF-8, будет найдена последовательность байтов, вы получите MalformedInputException
.
Кодировка символов по умолчанию вашей системы может быть или не быть UTF- 8, так что это может объяснить разницу в поведении.
Вам нужно будет выяснить, какая кодировка символов используется для файла, а затем явно использовать это. Например:
String content = new String(Files.readAllBytes(Paths.get("_template.txt")),
StandardCharsets.ISO_8859_1);
Второй пример:
Stream lines = Files.lines(Paths.get("_template.txt"),
StandardCharsets.ISO_8859_1);
То, в чем Вы нуждаетесь, является SoapExtension. Здесь существует довольно много хороших примеров:
, Как, я получаю доступ к ответу SOAP
Получение НЕОБРАБОТАННЫХ Данных Мыла от веб-Ссылочного Клиента, работающего в ASP.net
ошибка анализа XML при обработке ответа SOAP
Одна из статей, связанных с: http://msdn.microsoft.com/en-us/magazine/cc164007.aspx
Также поиск ТАК: https://stackoverflow.com/search? q=SoapExtension