Я использую JSch для передачи в UTF-8 закодированы XML-файла с компьютера Windows, работает Bitvise SSH Server в локальный каталог на моем Linux машине (Ubuntu), используя следующий код:JSch SFTP передача изменяет кодировку
// Open JSch session
JSch jsch = new JSch();
session = jsch.getSession("username", "host", 22);
session.setPassword("password");
session.setConfig("StrictHostKeyChecking", "no");
session.setTimeout(5 * 60 * 1000);
session.connect();
// Open SFTP Connection
ChannelSftp sftpChannel = (ChannelSftp)session.openChannel("sftp");
sftpChannel.connect();
// Download the XML File to a local directory
byte[] buffer = new byte[1024];
final BufferedInputStream bis = new BufferedInputStream(sftpChannel.get("file.xml", new DeliveryProgressMonitor()));
final BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(targetFile));
int readCount = -1;
while((readCount = bis.read(buffer)) > 0) {
bos.write(buffer, 0, readCount);
}
// Closing + Cleanup of resources
Я проверил, что извлеченный файл хранится в UTF-8 без спецификации на сервере, с соответствующими символами, такими как äöü
.
После переноса файла, используя код, указанный выше файл все еще находится в UTF-8 кодировкой на целевой машине (file -bi
выходы application/xml; charset=utf-8
), однако просмотр содержимого файла я не могу видеть, что äöü
больше не читаемым и были преобразуется в последовательности символов, такие как ü
.
Та же проблема возникает также при примере программы из
http://www.jcraft.com/jsch/examples/Sftp.java.html
, а также при использовании командной строки УПП.
Использование того же Java-кода для переноса файла на мою машину разработки под управлением Windows 10 сохраняет файл неповрежденным.
Как я могу убедиться, что кодировка остается неизменной, независимо от операционной системы, используемой на клиентской машине?
По всей вероятности, все работает отлично; это инструмент, который вы используете для просмотра файла на конечной машине, что является проблемой. 'ü' - это то, что вы видите, когда обрабатываете последовательность UTF-8, как будто это ISO 8859-1 (или Windows-1252). Как вы просматриваете содержимое полученного файла? – VGR
Спасибо VGR, на самом деле это проблема. Оказывается, мой XML-Parser vi использовал кодировку latin1, и мой XML-парсер жаловался на новые строки в данных, а не на самих кодировках –