■前提
クライアント: Windows10
サーバ: Linux
当初vsftpdでFTPサーバを運用していたが、Windowsからアップロードした際に日本語ファイル名が文字化けしたと連絡が来た。自分でも確認してみたが、確かにWindowsのエクスプローラからアップロードすると文字化けする。
文字化けの挙動が不可解。全文字化けではなさそう。
でもダメ文字ではなく、特定の文字位置が化けているような…
今回時間がなかったので細かい調査は実施せず、とりあえず解消方法だけ模索した。
原因として一番怪しいのは、Windowsの下記仕様変更だ。
Winows10でのFTPコマンド実行時の振る舞いについて
FTP接続の頭で、
OPTS UTF8 ON
する。その事自体は問題ない。
のだが、この後の「Windows側でファイル名をUTF-8にエンコード」のときにバグって化けてるとしか思えない。
つまり、OPTSが通ってしまうとUTF-8転送になってバグルートに落ちるので、OPTSを拒否させた上でSJISで転送してもらわないといけない。
vsftpdだとOPTSを無視することはできるが、クライアントとサーバで文字コードを変換させる設定が見つからなかった。
変換無しで考えた場合……
サーバ側UTF-8ファイル名だとWindowsからだと文字化けしていそう。
サーバ側SJISファイル名だと多分UTF-8解釈させると思うので、ちゃんとしたFTPクライアントから文字化けしていそう。
仕方ないので、vsftpdからproftpdに切り替えた。
proftpdにはエンコーディングをサーバ・クライアントで変換する設定がある。
proftpd.confに下記設定で、とりあえずWindowsエクスプローラからのFTPで文字化けがなくなった。
UseEncoding UTF-8 CP932 strict
LangDefault en_US
LangDefault en_US入れないとメッセージが文字化け。
クライアントがFFFTP、WinSCPあたりでも問題なさそう。とりあえずこれで。
[参考]
IEからProFTPdにアクセスするとファイル名が文字化けする - ブログ - ワルブリックス株式会社
あと恒例の文字化けファイルをLinux上でいじる方法。
Linuxでファイルが文字化けした際の対処法 | OXY NOTES
バッドノウハウ的なので追求しない。