FTP で日本語ファイルが文字化けする場合の対処法 (FFFTP, WinSCP)

FTP でサーバにアップロードされている日本語ファイルを扱う際に注意すべき事項をメモしておきます。

……そもそも基本的に日本語を含むマルチバイト文字をアップロードするのは宜しくないのですが、誤ってアップロードしてしまった際などの対処法として。

ちなみに一度アップロードしたファイルはサーバによってはクライアントとサーバの文字コードの違いで正しく認識できず、名前の変更や削除すらできなくなってしまうこともあるので注意。

FFFTP

まず FFFTP の場合。

登録されている接続情報を選択して「設定変更」。

FFFTP で UTF-8 での転送をオフにする方法
FFFTP で UTF-8 での転送をオフにする方法

「拡張」タブを開き、「接続時にホストに送るコマンド」のテキストエリアに以下の文字列を入力。

OPTS UTF8 OFF

これで接続しなおすと文字化けしなくなります。

WinSCP

次に WinSCP の場合。

WinSCP で UTF-8 での転送をオフにする方法
WinSCP で UTF-8 での転送をオフにする方法

セッションを繋ごうとした際に、右下の「設定」のドロップダウンから「設定」を選択。

「高度なサイトの設定」ダイアログの中で、左のツリーから「環境」下の「FTP」を選択。

WinSCP で UTF-8 での転送をオフにする方法
WinSCP で UTF-8 での転送をオフにする方法

「ログイン コマンドの送信」のテキストエリアで FFFTP と同様に次のコマンドを入力。

OPTS UTF8 OFF

これでOK。

備考

原因としては、サーバが対応していないのにクライアント側が UTF-8 で転送しようとすると文字化けを起こす模様。

しかも Windows10 はデフォルトで UTF-8 で転送するよう

OPTS UTF8 ON

のコマンドを送るとのことので、より現象に遭遇しやすくなっているものと思われます。

この辺で面倒になるので、サーバにはマルチバイト文字のファイル名は止めていただきたいのですよね。あと、スペースや特殊な記号を含むファイル名。

余談 (WinSCP)

今回は効果がなかったですが別の方法を。

WinSCP で UTF-8 での転送をオフにする方法
WinSCP で UTF-8 での転送をオフにする方法

「高度なサイトの設定」ダイアログで「環境」を選択、「サーバ環境」の中の「ファイル名を UTF-8 でエンコード」を「オフ」にしても今回は効果がありませんでした。

……項目の名前的に同じことをやっているような気がするのですが、何か差があるのでしょうか。

参考

FFFTP

WinSCP

WinSCP (今回は効果がなかった)

Windows10 での仕様

Windows 10 ではデフォルトで OPTS UTF8 ON (UTF-8 でファイル名を扱う) コマンドをサーバに送信してしまうため、対応していないサーバでは今回のような現象が発生してしまうようです。

RFC2640

サーバが UTF-8 をサポートしている場合は OPTS UTF8 ON を送るよう RFC2640 で定義されている模様。

サーバ側 (proftpd)

この記事を書いた人

アルム=バンド

フロントエンド・バックエンド・サーバエンジニア。LAMPやNodeからWP、Gulpを使ってejs,Scss,JSのコーディングまで一通り。たまにRasPiで遊んだり、趣味で開発したり。