Windows上での日本語ファイルがLinuxに送ると文字化けしちゃった。それを元に戻したい!!って思って、その方法を調べました。
オチから言うと、今から書くことをやらなくても、WinSCPなどの設定をきちんとしてやれば文字化けしないみたいです。悲しい(笑)
文字コードが違う
WindowsはSJISをベースにしたcp932という文字コードなのに対して、Redhat6の文字コードはUTF-8なのでファイル名は「invalid Encoding」というエラーになっているようでした。
余談
Redhatのファイル名の文字コードは以下のように確認できます。
13行目の通り、デフォルトでUTF-8が指定されているみたいです。
# cat /etc/xdg/user-dirs.conf # This controls the behaviour of xdg-user-dirs-update which is run on user login # You can also have per-user config in ~/.config/user-dirs.conf, or specify # the XDG_CONFIG_HOME and/or XDG_CONFIG_DIRS to override this # enabled=True # This sets the filename encoding to use. You can specify an explicit # encoding, or "locale" which means the encoding of the users locale # will be used filename_encoding=UTF-8
ファイル名の変更:convmv
転送時にうまくいかないことはわかったところで、redhatに転送後にファイル名を変換するツールを見つけました!
convmvってやつです。昆布ムーブ、ですかね?convって何の略なんだろう。。
# yum install convmv … Complete! (変換できるかの確認) # convmv -r -f cp932 -t utf8 * (実際に変更) # convmv -r -f cp932 -t utf8 * --notest
「–notest」をつけると実際に変更されます。つけないと、とりあえず、変更できるかの状況確認のみ。
「-r」は再帰的にってことで、「-f」はfromで「-t」はToってところでしょうか?
そういうわけで、再帰的にcp932からutf-8に変更してます。
余談
CentOSのレポジトリにはconvmvは存在しなかったので、rpmforgeからいただきました。
rpmforgeのレポジトリの追加方法は以下を参照。
おしまい
私はWinSCP使ってファイル転送してるんですが「あれ?こんなことなら最初からWinSCPに変換機能があればいいんじゃない?」と思いました。
そして、改めてその観点で調べると、きちんと設定をすればWinSCPで送っても文字化けしないことがわかりました…という遠回りの話。