日々のつれづれ

不惑をむかえ戸惑いを隠せない男性の独り言

文字コードをShit-jisからUTF-8に変換する

12年間の解析人生で一番、面倒に思ったのは、統計解析でも、ビジュアライズでも、データマイニングでもなく、文字コードです。

Shift-jisはWindowsの世界ではすごく一般的で使いやすいようですが、Rの世界では鬼門です。
これはいろんな所で話していますが、極東の島国固有の文字コードなので、OSSの世界ではいろいろ弊害が出てしまいます。

R界隈では、encoding=cp932で回避できますが、他の言語と併用するようになると、予めシェルで文字コードを変換するのも手だと思います。

でも、元ファイルを書き換えてしまうと、持ち主のWindowsユーザからクレームも出てしまうので、やっぱりcpをかませるのが常套手段だと思います。

Linuxではnkfコマンドで文字コードを変換できます。
nkfの引数は次のようになっています

  • j JISコードを出力する。
  • e EUCコードを出力する。
  • s シフトJISコードを出力する。
  • w -w8[0] -w16[BL][0] Unicode を出力する。
  • w -w80 UTF8コードを出力する。(BOM無し)
  • w8 UTF8コードを出力する。
  • w16 -w16B0 UTF16コードを出力する。(Big Endian / BOM無し)
  • w16B UTF16コードを出力する。(Big Endian / BOM有り)
  • w16L UTF16コードを出力す る。 (Little Endian / BOM有り)
  • w16L0 UTF16コードを出力する。(Little Endian / BOM無し)

で、shift-jisのファイル"file.txt"をUTF-8に変換したいときは次のようになると思います。

hoge:~/Desktop/work$ nkf -g file.txt
Shift_JIS
hoge:~/Desktop/work$ cp file.txt file2.txt
hoge:~/Desktop/work$ nkf -g file2.txt
Shift_JIS
hoge:~/Desktop/work$ nkf -w --overwrite file2.txt
hoge:~/Desktop/work$ nkf -g file2.txt
UTF-8

これでも、どうしようもない時もありましたが…