
アプリケーションでさまざまなエンコード手法を確認しています。FTP サーバーに関連する使用例の 1 つで、UTF-16 に関連するものは見つかりませんでした。つまり、UTF-8 を使用している場合は FTP サーバーにログインできますが、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の両方をサポートしており、ログインすることができます
コーディングを始める前に試した手順
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 を使用しますが、Windows FTP サーバーは引き続き UTF-8 を使用し、必要に応じて 2 つのエンコードを変換します。