Имя файла Camel ftps с британским фунтом в заголовке camelFileName как £

Я использую компонент ftps camel с версией camel 2.22.0. FTP-сервер находится в Linux.

https://camel.apache.org/components/latest/ftps-component.html

В имени файла есть специальные символы, которые кодируются с помощью java.net.URLEncoder в UTF-8. Я использую заголовок camelFileName для кодирования имени файла.

Специальные символы, такие как одинарные кавычки, двойные кавычки, фигурные скобки, кодируются, однако, когда имя файла имеет знак британского фунта £, верблюжий заголовок camelFileName заполняется двумя специальными символами, Â £, оба кодируются. Может кто-нибудь объяснить, почему это так?

Пример:

Filename: testfile£.csv,
camelFileName header: testfile£.csv,
encoded filename: testfile%C3%82%C2%A3.csv

String fileName = (String) message.getHeader(CAMEL_FILENAME);

String encodedFileName = Utils.encodeValue(fileName);

private String encodeValue(String value) {
    return URLEncoder.encode(value, StandardCharsets.UTF_8.toString());
}

person user13729044    schedule 30.04.2021    source источник


Ответы (1)


Проблема с кодировкой может приводить к появлению странных символов

При преобразовании из utf-8 в iso-8859-1 или из utf-8 в windows-1252, знак фунта Великобритании £ будет преобразовывать к £.

Вероятно, ОС на стороне сервера хранит имя файла как UTF-8, а ОС на стороне клиента использует iso-8859-1 / windows-1252 в качестве языка по умолчанию. Это вызывает изменение имени файла из-за проблемы с кодировкой.

Объедините это и this, установка ftpClient.controlEncoding на UTF-8 может помочь в вашем случае.

person hk6279    schedule 01.05.2021