Кодовые страницы
Содержание
Введение
FTP является довольно старым протоколом, и что мы воспринимаем как должное в настоящее время, даже не рассматривалось 20 лет назад. Одна из этих вещей - поддержка для не-английских символов. Когда протокол FTP был разработан, компьютеры в основном использовали английский и не могли отображать не английские символы, такие как умляуты, акцентированные буквы, или иероглифы. Таким образом, протокол FTP был разработан для работы только с английским алфавитом, а именно: 7-битные ASCII.
Проблема в том, что многие клиенты и серверы FTP намеренно отклоняются от FTP-спецификации для того, чтобы поддерживать и другие, нестандартные наборы символов.
Для решения этой проблемы, FTP-протокол был расширен для совместимости с UTF-8 кодировкой, которая является расширением ранее использованного набора символов.
Если у вас проблемы с отображением имен файлов содержащих иностранные символы, это может быть по двум причинам:
- Сервер или клиент следует оригинальной спецификации относительно символов и отвергает "незнакомые" символы
- Сервер или клиент нарушает спецификацию и использует пользовательские кодировки
Заметим, что FileZilla Client и Server полностью поддерживают UTF-8.
Если у вас проблемы с другими клиентами или серверами, пожалуйста установите программы, поддерживающие UTF-8 или воздержитесь от использования иностранных символов. Все остальное не соответствует FTP спецификации и не работает.
Технические характеристики
Спецификация FTP изложена в RFC 959, которая опубликована 1985 году. FTP протокол разработан на основе протокола Telnet, который описан в RFC 854. В соответствии с RFC 854, NVT (Network Virtual Terminal — Сетевой Виртуальный Терминал) необходимо использовать с 7-битной кодировкой ASCII как со стандартным набором символов, предназначенным для представления других стандартных систем. Набор содержит 127 различных символов: латинские буквы, десятичные цифры, знаки препинания и несколько управляющих символов. Акцентированные (со знаком ударения) буквы, умляуты и другие символы не содержаться в стандартном наборе ASCII.
Для поддержания не латинских символов, в 1999 году технические характеристики FTP были расширены в RFC 2640. Это расширение требует в качестве стандартного набора символов использование формата UTF-8. Он представляет собой полный расширенный набор на базе ASCII — каждый валидный символ в ASCII является таким же и в UTF-8. Стандартный набор символов в UTF-8 может отразить любой валидный символ Юникода. Этот набор включает умляуты, акцентированные буквы и другие символы. Он является полностью обратно-совместимым. До тех пор, пока вы не используете кириллические символы, не имеет значения поддерживает ли используемая программа RFC 2640 или нет. Запомните, что если вы начнете использовать кириллические символы прежде установки совместимого программного обеспечения RFC 2640, могут возникнуть проблемы. Это те проблемы, которые возникают всецело по вине пользователя, по причине невнимательного следования инструкции.
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 используется везде, где доступен SFTP