我正在检查我的应用程序是否使用了不同的编码技术。在一个与 FTP 服务器相关的用例中,我没有看到任何与 UTF-16 相关的内容。这意味着如果 FTP 服务器使用 UTF-8,我可以登录它,如果我将其更改为 UTF-16,我将无法登录 FTP 服务器。我已从该服务器上的客户端执行了“FEAT”,但在响应中没有看到 UTF-16。这是否意味着我的 FTP 服务器不支持它?
我可以通过执行命令在 FTP 服务器上启用 UTF-8 OPTS UTF8 ON
。是否有这样的命令可以在 FTP 服务器上启用 UTF-16,或者它不支持 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,我可以在其中登录
在进入 codng 之前我尝试过的步骤
在本地创建 FTP 服务器并设置目录
从 FTP 客户端 (FileZilla) 连接到 FTP 服务器
- 当我的字符集为 UTF-8 时,连接成功。
- 当我的字符集为 UTF-16 时,连接失败 在此处输入图片描述以下是回复
以下是日志状态:连接已建立,正在等待欢迎消息...响应:㈲ⴰ楆敬楚汬敓癲牥ㄠ㐮ㄮ错误:无法连接到服务器状态:正在等待重试...状态:正在解析本地主机的地址状态:连接到 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 作为文件名,但 Windows FTP 服务器仍然使用 UTF-8,只需根据需要在两者之间进行转换即可。