テキストファイル出力時の改行コード

var myText = 'After Effects\n';

After Effectsでテキストを書き出す場合の改行コードについてです。

After Effectsでテキストを出力する場合、改行コードを以下のように入れると思います。

改行コードはCR, LF, CR+LFなどがあります。通常はOSによって使い分けられています。

参考: http://ja.wikipedia.org/wiki/改行コード

特に考えなしに「\n」や「\r」をそういうものだと思って入れている人も多いかもしれませんが、中にはWindowsの場合は以下のようにしている人もいるかもしれません。

var myText = 'After Effects\r\n';

実は、この2つの記述はAfter Effectsでは特に違いはありません。JavaScriptではこれらの違いは明確に規定されていますので、一般的なJavaScriptのプログラミングにおいては「\n」「\r「\u000A」「\u000D」の違いを意識することがテキストを扱う上で重要になります

…が、After Effectsではどれも同じように単に「改行」として扱われます。

正確にいうと「OSネイティブの改行コード」です。

After Effects内のダイアログ表示やテキストレイヤーなどに使っている分にはまったく問題にならないのですが、このテキストをファイル出力して、他のアプリケーションに引き渡す場合にこれが問題になります。例を上げると、CSV、XMLなどを他のアプリケーションに読み込ませたい場合などでは、厳密に改行コードが指定されている場合があります。

普通はOSネイティブなら、そのOSの改行コードになる筈なのですが、困ったことにAfter Effectsでは文字コード関連が古い仕様のまま残っています。

Mac OS Xの場合は現在ではUNIXの仕様になっているので、LFの筈なのですが、After EffectsはOS9時代からの仕様のままCRとして処理してしまいます。ここでは書きませんが、実は日本語の文字コードに関しても同じような問題があります。

var myText = "Application\nAfter Effects\n"

var myFile = new File(~/Desktop/myTextDocument.txt);

myFile.open("w");

myFile.write(myText);

myFile.close();

出力されたファイルをテキストエディタで表示するとちゃんと改行されて見えます。

Application

After Effects

ですがviで表示すると、スクリプトでは「\n」や「\u000A」を使用していてもCRコードが表示されてしまいます。

Application^MAfter Effects^M

odで確認してみると\nではなく\rが使用されているのが確認できます。

0000000 A p p l i c a t i o n \r A f t e

0000020 r E f f e c t s \r

0000032

これを正しくLFで出力したい場合にはFileオブジェクトのlineFeedプロパティを「Unix」にします。

ちなみにCRの場合は「Mac」、「CR+LF」の場合は「Windows」です(…なんかいい加減ですね)。

var myText = "Application\nAfter Effects\n"

var myFile = new File('~/Desktop/myTextDocument.txt');

myFile.open("w");

myFile.lineFeed = 'Unix'; //<----- LFを指定

myFile.write(myText);

myFile.close();

出力したファイルをodで確認してみると\nになっています。

0000000 A p p l i c a t i o n \n A f t e

0000020 r E f f e c t s \n

0000032