LoginSignup
3
2

FTPサーバが「UTF-8に対応しているか」確認する方法

Last updated at Posted at 2022-12-10
FTPサーバが「UTF-8に対応しているか」確認する方法
# レスポンスが「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
3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2