FTP — достаточно старый протокол, и 20 лет назад то, что мы сегодня считаем само собой разумеющимся, даже не принималось во внимание. Одной из таких вещей является поддержка неанглийских символов. Когда FTP был разработан, компьютеры в основном использовали английский язык и не могли отображать неанглийские символы, такие как умляуты, буквы с акцентом или иероглифы. Таким образом, протокол FTP был разработан для работы только с английским алфавитом, то есть: 7-битный ASCII.
Проблема в том, что многие FTP-клиенты и серверы преднамеренно отклоняются от спецификации FTP, чтобы поддерживать другие, нестандартные наборы символов.
Чтобы решить эту проблему, протокол FTP был расширен для совместимости с кодировкой UTF-8, которая является расширением ранее использовавшегося набора символов.
Если у вас возникли проблемы с отображением имен файлов, содержащих иностранные символы, это может быть по двум причинам:
- Сервер или клиент следует оригинальной спецификации относительно символов и отвергает «незнакомые» символы
- Сервер или клиент нарушает спецификацию и использует пользовательские кодировки
Обратите внимание, что клиент и сервер FileZilla полностью поддерживают UTF-8.
Если у вас есть проблемы с другими клиентами или серверами, установите программы, поддерживающие кодировку UTF-8, или воздержитесь от использования иностранных символов. Все остальное не соответствует спецификации FTP и не работает.
UTF8 особенности
RFC 2640 совместимый сервер должен поддерживать FEAT команду и должен включать строку, содержащую UTF8 в своем ответе:
Command: FEAT
Response: 211-Features:
[…]
Response: UTF8
[…]
Response: 211 End
Конфликтующие спецификации
Существует давно истекший IETF драфт который конфликтует с RFC 2640. Этот драфт также требует FEAT ответ включать UTF8, но в дополнение требует от клиента слать OPTS UTF-8 ON для поддержки UTF-8.
Если RFC 2640 совместимый клиент отправляет OPTS UTF-8 ON, он должен будет использовать UTF-8 в любом случае.
RFC 2640 совместимые сервера не должны устанавливать UTF-8 при OPTS UTF-8 ON.
SFTP протокол
Ситуация с SFTP аналогична ситуации с FTP. Начиная с версии 4 спецификации SFTP для имен файлов требуется кодировка UTF-8.
Однако чаще всего используется протокол SFTP версии 3, реализованный в OpenSSH. Эта версия спецификации SFTP не требует UTF-8. На самом деле, это ничего не говорит о кодировании. Однако разумно предположить, что на этих серверах используется кодировка UTF-8 по следующим причинам:
- Новая версия протокола требует UTF-8
- Протокол SSH, по которому работает SFTP, также требует кодировки UTF-8.
- Даже в версии 3 протокола иногда требуется UTF-8
- Собственный набор символов большинства современных операционных систем Unix (аналогичный UTF-8) использует UTF-8.
По сути, это означает, что кодировка UTF-8 используется везде, где доступен SFTP.