2015-10-06 3 views
1

Я использую 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 сохраняет файл неповрежденным.

Как я могу убедиться, что кодировка остается неизменной, независимо от операционной системы, используемой на клиентской машине?

+0

По всей вероятности, все работает отлично; это инструмент, который вы используете для просмотра файла на конечной машине, что является проблемой. 'ü' - это то, что вы видите, когда обрабатываете последовательность UTF-8, как будто это ISO 8859-1 (или Windows-1252). Как вы просматриваете содержимое полученного файла? – VGR

+0

Спасибо VGR, на самом деле это проблема. Оказывается, мой XML-Parser vi использовал кодировку latin1, и мой XML-парсер жаловался на новые строки в данных, а не на самих кодировках –

ответ

0

Как отметил VGR в комментарии выше передачи работает нормально, это просто редактор, используя неправильную кодировку, чтобы открыть файл

Смежные вопросы