FTP でサーバにアップロードされている日本語ファイルを扱う際に注意すべき事項をメモしておきます。
……そもそも基本的に日本語を含むマルチバイト文字をアップロードするのは宜しくないのですが、誤ってアップロードしてしまった際などの対処法として。
ちなみに一度アップロードしたファイルはサーバによってはクライアントとサーバの文字コードの違いで正しく認識できず、名前の変更や削除すらできなくなってしまうこともあるので注意。
FFFTP
まず FFFTP の場合。
登録されている接続情報を選択して「設定変更」。
「拡張」タブを開き、「接続時にホストに送るコマンド」のテキストエリアに以下の文字列を入力。
OPTS UTF8 OFF
これで接続しなおすと文字化けしなくなります。
WinSCP
次に WinSCP の場合。
セッションを繋ごうとした際に、右下の「設定」のドロップダウンから「設定」を選択。
「高度なサイトの設定」ダイアログの中で、左のツリーから「環境」下の「FTP」を選択。
「ログイン コマンドの送信」のテキストエリアで FFFTP と同様に次のコマンドを入力。
OPTS UTF8 OFF
これでOK。
備考
原因としては、サーバが対応していないのにクライアント側が UTF-8 で転送しようとすると文字化けを起こす模様。
しかも Windows10 はデフォルトで UTF-8 で転送するよう
OPTS UTF8 ON
のコマンドを送るとのことので、より現象に遭遇しやすくなっているものと思われます。
この辺で面倒になるので、サーバにはマルチバイト文字のファイル名は止めていただきたいのですよね。あと、スペースや特殊な記号を含むファイル名。
余談 (WinSCP)
今回は効果がなかったですが別の方法を。
「高度なサイトの設定」ダイアログで「環境」を選択、「サーバ環境」の中の「ファイル名を UTF-8 でエンコード」を「オフ」にしても今回は効果がありませんでした。
……項目の名前的に同じことをやっているような気がするのですが、何か差があるのでしょうか。
参考
FFFTP
WinSCP
WinSCP (今回は効果がなかった)
Windows10 での仕様
Windows 10 ではデフォルトで OPTS UTF8 ON
(UTF-8 でファイル名を扱う) コマンドをサーバに送信してしまうため、対応していないサーバでは今回のような現象が発生してしまうようです。
RFC2640
サーバが UTF-8 をサポートしている場合は OPTS UTF8 ON
を送るよう RFC2640 で定義されている模様。