Проблема с кодировкой UTF-8 при передаче файлов по FTP
Я могу загружать файлы из своего приложения через FTP, используя библиотеку FTPClient Java.
(Я загружаю в хранилище Oracle XML DB.)
Все загружается нормально, если в XML-файле нет фигурных кавычек. В этом случае я получаю сообщение об ошибке: LPX-00200: не удалось преобразовать кодировку UTF-8 в UCS2
Я могу загрузить то, что я считаю тем же файлом, используя инструмент Windows CMD line FTP. Мне интересно, есть ли какая-то настройка кодирования, которую использует инструмент Windows CMD line, который, возможно, мне нужно установить в моем коде Java.
Кто-нибудь знает что-нибудь об этом? Спасибо!!
4 ответа
В двоичном коде эта проблема исчезает.
FTPClient.setType(FTPClient.TYPE_BINARY);
Я не знаю это приложение, но вы можете попробовать использовать -Dfile.encoding=UTF-8 в командной строке JVM
Если ваш файл содержит фигурные кавычки, они находятся в диапазоне старших битов в наборах символов 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, если он помечен как таковой.
Не знакомы с репозиториями Oracle XML DB - могут ли они принимать сжатые загрузки? Архивирование или архивирование вашего файла позволит сэкономить ресурсы и нарушит автоматическое определение любого типа файлов ASCII.