Excelで日本語を書いたらLinuxで文字化けする!文字コードを変換しよう
こんにちは、チャリおじさんです。
みなさんはこういう経験ありませんか?
「viでファイルを開いたら、日本語部分が文字化けしてしまった!」
もしやあなた、そのファイルはExcelで作ったのでは?
でも大丈夫!文字コードを変換すれば、ちゃんとviで正しく表示されて、編集したり、コマンド操作できるようになりますよ。
なぜ文字化けするのか
Excelというソフトは、【Shift-JIS】という文字コードで保存するようにできています。これは変更できないようです。
対して、viなどLinuxターミナルは、【UTF-8】という文字コードでファイルを読み込むようになっています。
ファイルの文字コードと読み込む側の文字コード設定が一致しないと、文字化けしてしまいます。
viで編集するだけなら
viでは読み込む文字コードを変更することができます。
コマンドviの中で編集する場合は簡単に文字化けを直すことができます。
コマンドモードで、↓を打ってみましょう。
:e ++enc=sjis
どうですか、正しく表示されたと思います。
ターミナル上でコマンド操作するなら
しかし、ターミナルのコマンドライン上で操作する場合はファイルの文字コードを【UTF-8】にしないとエラーになってしまいます。
「grepコマンドで”気温”という文字列を含むファイルを探す」とか、
「sedコマンドで”南”を”北”に置換する」とか、できないのです。
これを解決するために、nkfコマンドを使って、ファイルの文字モードを変換します。
nkfコマンドをインストールする
おそらく初期状態だと使えないので、nkfをネットからダウンロード後、解答、インストールする必要があります。
やり方は以下のサイトを参考にしてください。
開発ツール/Cygwinにnkfをインストールする方法 - Windowsと暮らす
nkfコマンドの使い方
$ nkf -[オプション] 元ファイル名 > 変更後ファイル名
で、ファイルの文字コードを変更できます。
元ファイルに上書きしたい場合は、
$ nkf -[オプション] --overwrite 元ファイル名
でできます。
オプションには、何の文字コードに変換するかを指定します。
今回は【UTF-8】に変換するので、オプションは -w です。
例えばaaa.csvを変換して上書きする場合は、
です。
ちなみに
以下のオプションも便利そうです。
-g 元ファイルの文字コードを検索する
-s Shift-JISに変換する
-e EUCに変換する
-Lu 改行コードをWindowsからLinuxに変換する (CR+LF→LF)
改行コードについては、また別の記事で紹介しましょう。
最後に
いかがでしたか。
無事に日本語がgrepやsedに引っかかってくれるようになったでしょうか。
それではまた次回。チャリおじさんでした。