
Я проверяю свое приложение на наличие различных методов кодирования. В одном из таких случаев использования, связанных с FTP-сервером, я не вижу ничего, связанного с UTF-16. Это означает, что я могу войти на FTP-сервер, если на нем UTF-8, а если я изменю его на UTF-16, я не смогу войти на FTP-сервер. Я выполнил "FEAT" из своего клиента на этом сервере, я не вижу UTF-16 в ответе. Означает ли это, что мой FTP-сервер не поддерживает его?
Я могу включить UTF-8 на FTP-сервере, выполнив команду OPTS UTF8 ON
. Есть ли такая команда, с помощью которой я могу включить UTF-16 на FTP-сервере или он не поддерживает UTF-16 ??
Ниже приведен ответ FEAT
команды
Command: FEAT
Response: 211-Features:
Response: MDTM
Response: REST STREAM
Response: SIZE
Response: MLST type*;size*;modify*;perm*;
Response: MLSD
Response: AUTH SSL
Response: AUTH TLS
Response: PROT
Response: PBSZ
Response: **UTF8**
Response: TVFS
Response: EPSV
Response: EPRT
Response: MFMT
Response: 211 End
** ПРИМЕЧАНИЕ: HTTP/HTTPS поддерживает как UTF-8, так и UTF-16, с помощью которых я могу войти в систему.
Шаги, которые я испробовал, прежде чем приступить к написанию кода
FTP-сервер создается локально с каталогом
Из FTP-клиента (FileZilla), подключающегося к FTP-серверу
- Если у меня установлена кодировка UTF-8, соединение устанавливается успешно.
- Когда у меня установлена кодировка UTF-16, соединение не устанавливается введите описание изображения здесьи ниже ответ
Ниже приведен журнал. Статус: соединение установлено, ожидание приветственного сообщения... Ответ: ㈲ⴰ楆敬楚汬敓癲牥ㄠ㐮ㄮ Ошибка: не удалось подключиться к серверу Статус: ожидание повторной попытки... Статус: разрешение адреса localhost Статус: подключение к 127.0.0.1:21... Статус: соединение установлено, ожидание приветственного сообщения... Ответ: ㈲ⴰ楆敬楚汬敓癲牥ㄠ㐮ㄮ Ошибка: не удалось подключиться к серверу
решение1
FTP не поддерживает UTF-16. Это текстовый протокол, который использует ASCII для команд и ответов; он может поддерживать UTF-8 только потому, что последний является надмножеством ASCII (например, команды типа FEAT
кодируются одинаково в обоих). То же самое относится к старым кодировкам, таким как ISO-8859, нонеприменяются к UTF-16 — начальное приветствие сервера (которое всегда в ASCII) не будет понято клиентом, ожидающим UTF-16, а команды, отправленные в формате UTF-16, не будут поняты сервером.
Однако обычно нет практической необходимости поддерживать обе кодировки — и UTF-8, и UTF-16 — это просто разные представления одних и тех же кодовых точек Unicode; любое имя файла, которое может быть закодировано в UTF-16, может быть также закодировано в UTF-8 и наоборот. Например, хотя Windows внутренне использует UTF-16 для имен файлов, FTP-серверы Windows по-прежнему используют UTF-8 и просто преобразуют их по мере необходимости.