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