# レスポンスが「200」なら「UTF-8に対応している」
ftp> quote opts utf8 on
経緯 : 「UTF-8に対応しているか」確認したい
とっても古いFTPサーバは、UTF-8に対応していないことがあります。
IIS 7.0 未満の FTP サービスは常に CP932 固定でしたが、
IIS 7.0 以降の FTP サービスは、CP932/UTF8 の両対応となっています。
Microsoft FTP ServiceのUTF-8対応について
プログラムで「UTF-8に対応していないFTPサーバ」へ接続する時は、エンコードに「CP932」を指定する必要があります。
が、どうやって「UTF-8に対応しているか」が確認できるのか?
「UTF-8に対応しているか確認する方法」を調べました。
「OPTS UTF8 ON」のレスポンスで確認できる
Windows10 と Windows Server 2016 からFTP接続時に自動で「OPTS UTF8 ON」が送られるようになったらしく、検索するといろんな情報が出てきました。
それらを読むと「OPTS UTF8 ON」を実行して、そのレスポンスで「UTF-8に対応しているか」がわかるようです。
制約上、今回はAWSのEC2 Instance Connectからしか接続できないのでFTPツールを使用することはできず・・・コマンドのみで確認するのですが、FTP接続後に「opts utf8 on」と打ってみたら・・・「?Invalid command」になりました。
接続先のFTPサーバへコマンドを送ることになるので「quote opts utf8 on」と打たなければならないことを知りました。
quote
指定した引数をリモートマシンに送信します。「literal」コマンドと同等です。
quote - FTPコマンド - IT専科
OPTSコマンドのレスポンスは「200」「451」「501」の3種類なので、レスポンス「200」だったら「UTF-8に対応している」と判断できるようです。
OPTSコマンド自体が対応されていない場合のレスポンスは「500」か「502」だそうです。
Response Syntax:
opts-response = opts-good / opts-bad
opts-good = "200" SP response-message CRLF
opts-bad = "451" SP response-message CRLF / "501" SP response-message CRLF
RFC 2389: Feature negotiation mechanism for the File Transfer Protocol
試してみる
# UTF-8対応FTPサーバAの場合
ftp> quote opts utf8 on
200 UTF8 set to on
# UTF-8非対応FTPサーバBの場合
ftp> quote opts utf8 on
451 Unable to accept OPTS UTF8
# UTF-8対応FTPサーバCの場合
ftp> quote opts utf8 on
200 Always in UTF8 mode.
# UTF-8対応FTPサーバDの場合
ftp> quote opts utf8 on
200 OK, UTF-8 enabled