Проблема с кодировкой UTF-8 при передаче файлов по FTP - PullRequest
0 голосов
/ 29 октября 2009

У меня есть возможность загружать файлы из приложения через FTP с помощью библиотеки Java FTPClient.

(Я загружаю в хранилище Oracle XML DB.)

Все загружается нормально, если в xml-файле нет фигурных кавычек. В этом случае я получаю ошибку: LPX-00200: не удалось преобразовать кодировку UTF-8 в UCS2

Я могу загрузить, как мне кажется, один и тот же файл, используя инструмент Windows CMD line FTP. Мне интересно, есть ли какой-нибудь параметр кодирования, который использует инструмент Windows CMD line, который, возможно, мне нужно установить в моем коде Java.

Кто-нибудь знает что-нибудь об этом? Спасибо !!

Ответы [ 4 ]

0 голосов
/ 31 октября 2009

Если ваш файл содержит фигурные кавычки, они находятся в диапазоне старших битов в наборах символов iso-8859-1 и windows-1252. В UTF-8 эти символы обычно занимают два байта в UTF-8.

Вполне возможно, что вы случайно закодировали файл xml в одну из этих кодировок вместо UTF-8. Это может привести к ошибке преобразования, поскольку устанавливаемый старший бит разрешен только в последовательностях из нескольких октетов UTF-8.

Если вы в Windows, откройте файл в Блокноте и попробуйте повторно сохранить документ, используя «Сохранить как ...» с кодировкой UTF-8, и загрузите измененный файл. В Unix используйте iconv или аналогичный инструмент для преобразования из ISO-8859-1 в UTF-8 перед загрузкой.

Если документ XML явно помечает свою кодировку, убедитесь, что он помечен правильной кодировкой (например, UTF-8). Во многих xml-синтаксических анализаторах вы можете анализировать кодированный XML-код iso-8859-1 или windows-1252, если он помечен как таковой.

0 голосов
/ 29 октября 2009

Не знаком с репозиториями Oracle XML DB - могут ли они принимать сжатые загрузки? Архивирование или архивирование вашего файла позволит сэкономить ресурсы и нарушит автоматическое определение любого типа файлов ASCII.

0 голосов
/ 30 октября 2009

В двоичном коде эта проблема исчезает.

FTPClient.setType(FTPClient.TYPE_BINARY);

http://www.sauronsoftware.it/projects/ftp4j/manual.php#3

0 голосов
/ 29 октября 2009

Я не знаю это приложение, но вы можете попробовать использовать -Dfile.encoding = UTF-8 в командной строке JVM

...