2013年7月14日日曜日

LibreOfficeでの文字化け(character encodingの指定法)

背景

Microsoft Office からexportした、テキストファイルがある。
(FreeBSD 9.1上の)emacsで書き進めようと思って、テキストファイルにexportしたのだけれど、やっぱりLibreOfficeで作業をしようと、気が変わった。

起きた問題

$ libreoffice hoge.txt
で開いたら、文字化けしている。
character encodingの問題だと思うのだけど、設定するところが見当たらない。
$ emacs hoge.txt
は問題なく、「適当に」encodeを解釈して、きちんと日本語で表示されるのに。
お、左下を見るとS(DOS)と表示されている。
encodingがShift-JIS (S)で、改行コードがCR+LF(DOS)なのね。
Sの代わりにU(UTF-8)、E(EUC)はよく見かける。
(DOS)の代わりに:だと、改行コードはLF。

解決法

$ LANG=ja_JP.SJIS libreoffice hoge.txt
でLibreOfficeを起動する。ふだんは、LANG=Cで暮らしているのでそのままでは開けなかったらしい。
LANGとして選べるものは、FreeBSDでは、/usr/share/nls/の下にあるディレクトリの名前になっているもの。
日本語だと、ja_JP.SJIS ja_JP.UTF-8 ja_JP.eucがあった。
これで、LibreOfficeで文字化けせずに開ける。

改行コード

で、LibreOfficeで編集して、テキスト形式で保存したのだけど、追記した部分の改行コードがLFになっていた。もとからある部分はCR+LFのまま。
部分ごとに改行コードが違うのはよろしくないので、sedで直す。
$ gsed s/'\r'//g hoge.txt >tmp
$ gsed 's/$/\r/' tmp > hoge_new.txt
BSD sedではうまくいかなかったのでgsedを使う。Linuxユーザはもちろん普通のsedでOK。
この形式ならMicrosoft Officeでも問題なく開けるはず。

以上