2011年06月29日

OpenOffice(LibreOffice)とテキストエディタの改行コード

以前から、OpenOffice、最近ではLibreOfficeを使っていて困ることがひとつある。それは、テキストエディタで処理した文字列をOpenOfficeのワープロWriterにコピー&ペーストして.doc形式で保存したあと、再度開くと、改行が増えてしまうことだ。具体的には、1つの改行マークが2つになる。だから、各段落の間に1行の空白ができてしまうことになる。これはちょっと都合が悪い。OpenOffice上で作成したテキストなら、こういうことは起こらない。なぜよそから持ってきたテキストでこういうことが起きるのか、不思議で仕方なかった。これを防止する方法も思いつかず、どうしてもまずい場合には、改めてOpenOffice上でいちいち手作業でいったん改行を削除し、再び改行してやるという面倒なことをしていた。これは面倒で、ときにはやっていられないと思うこともある。

OpenOffice上で改行マークの一括置換でもできればこういう問題は起こらないのだけれど、OpenOfficeはこういう特殊コードを検索対象にしてくれない。一方、テキストエディタでは、たいていは改行やタブストップなどの特殊コードも検索・置換の対象になる。だから、たとえば本来1つのはずの改行が2つになってしまったとしたら、それをテキストエディタに持っていった上で、2つの改行マークを検索対象にして1つの改行マークに一括置換してやれば、修正する処理はできる。けれど、この修正済みのテキストをコピー&ペーストでOpenOfficeに持っていったら、また同じことが起こるだけ。どうにもうまくいかない。

それでもこういう絡みの試行錯誤を続けていると、少しだけ見えてきたことがあった。それは、実際の改行コードと、テキストエディタ上で扱う改行コードが微妙にちがうということだ。

詳細はWikipediaのこちらに書いてあるのだけれど、テキストエディタ(少なくともgedit)上の検索置換では、改行マークは\n、\rもしくは\r\nで入力することができる。いずれでも改行になるのだけれど、これは概ねCR、LF、CR+LFに相当する。ただし、これは「概ね」であって、Wikipediaに「しかし一般的な認識に反して、これらのエスケープシーケンスは一般的にはLFやCRと等価ではない」と明記されている。どうやらこのことが、改行コードが増えてしまう原因のような気がしてきた。

詳しいメカニズムはわからないけれど、ペースト時と保存時にそれぞれ\n、\rからCR+LFへの書き換えが行われているのではないだろうか。そしてそれが重複してしまう。だから改行コードが倍増するのではないだろうか。ちなみに、\n、\r、\r\nのいずれに置換しても結果は同じなので、ここは一律の変換が行われているのだろう。このあたりにもヒントがありそうだ。

試しに、\nや\rに置換するのではなく、<br />と、HTMLの改行に置換してやり、これをHTMLとして読み込むと、改行マークの倍増は起こらなかった。このあたりにも別なヒントがありそうな気がする。

ちょっと厄介な問題だけれど、こんなふうに解決の糸口が見えてきたのには希望が持てる。うん、希望は失わずにいたいものだ、何事にせよ。

posted by 松本 at 05:35| Comment(0) | TrackBack(0) | Ubuntuでの失敗・トラブル | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
この記事へのトラックバックURL
http://blog.seesaa.jp/tb/212358185
※言及リンクのないトラックバックは受信されません。

この記事へのトラックバック