Windowから送ったテキストファイルの文字コードをMacで変更する
モチベーション
Windowsユーザから送られてきた文字化けしているテキストファイルをMac側で読めるように変更する
WindowsとMacの文字コードの違い
WindowsとMacの文字コードは異なる、そんなのはみんな知っているが恥ずかしながらLinuxコマンドでそれを変換する方法を知らずにいた。Windowsでは様々な文字コードを扱うことができるが、日本語を表現する標準エンコーディングとしてShift-JISが使われている。一方で、Mac OSXではUnicodeが標準だ。当然同じ文字を表すのに用いるビット列は異なる。
また、文字コードだけでなく、改行コードも異なる。WindowではCR+LFが、Mac OSXではLFが使われる。この、CR(キャリッジリターン)とLF(ラインフィード)はタイプライターが使われていた自体に言葉で馴染みがないかもしれない。Wikipediaには以下のように書かれている。
これらの用語はタイプライターが由来である。タイプライターでは印字装置は固定され、紙の方が上下左右に移動することで、文字送りや行送りが行われる。英語などの左横書きにおける「キャリッジリターン」とは、紙を固定して移動する装置(キャリッジ)を元の位置に戻す(リターン、つまり紙の左端に印字装置が来る)ことである。「ラインフィード」とは紙を必要な行(ライン)だけ上に送る(フィード、つまり下の行に印字装置が来る)ことである。
nkfコマンド
さて、文字コードや改行コードの違いを理解した所で、実際に変換してみる。変換にはnkf
コマンドを使う。nkfはNetwork Kanji code conversion Filter
の略で、ファイルの文字コードを変換するのに利用するコマンド。Shift-JISでエンコードされて送られてきたテキストファイルが文字化けするから、UTF-8に変換したい、などの状況で利用する。
今回は所有しているMacのUTF-8環境に合わせるために以下のコマンドを実行した。
$ nkf -g windows.txt Shift_JIS $ nkf -w --overwrite windows.txt $ nkf -g windows.txt UTF-8
Shift-JISからUTF-8に文字コードが変換されている。nkfコマンドがインストールされていない時は以下を実行する。
$ brew install nkf
## MacからWindowsにShift-JISエンコーディングで送るには Shift-JISに変換するには以下を実行する。
$ nkf -s example.txt > example-sjis.txt
また、改行コードをWindowsのものに合わせるには以下を実行する。
$ nkf -Lw example.txt > example-win.txt
既存ファイルを上書きしながら同時にエンコーディングと改行をコードをWindowsのものにするには以下を実行する。
$ nkf -s -Lw --overwrite example.txt
fileコマンドでも文字コードの確認は出来る
実はファイルコマンドでも--mime
オプションをつけると文字コードを確認出来る。
$ file --mime example.txt example.txt: text/plain; charset=us-ascii
まとめ
WindowsでShift-JISでエンコーディングされたテキストファイルの文字コードを変換をした。このくらいサクッと出来ないと恥ずかしいよね。