ActionScript におけるファイルとコードに含まれる改行の扱いの違い

ファイル内の改行文字を削除するために ActionScript 2.0 の処理を書いているところで、「¥r」や「¥n」では認識されないことで嵌ったのでメモ。

テスト1: ファイルから読み込んだ文字列

改行コードは CR+LF (Windows)。文字コードは UTF-8。

1行目
2行目
var string_from_file:String = (上記のファイルを読み込んだもの);

var CR:String = String.fromCharCode(13);
var LF:String = String.fromCharCode(10);

trace('length CR: ' + string_from_file.split(CR).length); // => 2
trace('length LF: ' + string_from_file.split(LF).length); // => 2
trace('length ¥r: ' + string_from_file.split("¥r").length); // => 1
trace('length ¥n: ' + string_from_file.split("¥n").length); // =>

テスト2: 直接 AS のコードで書いた文字列

var string_from_code:String = "1行目¥r¥n2行目";

var CR:String = String.fromCharCode(13);
var LF:String = String.fromCharCode(10);

trace('length CR: ' + string_from_code.split(CR).length); // => 1
trace('length LF: ' + string_from_code.split(LF).length); // => 1
trace('length ¥r: ' + string_from_code.split("¥r").length); // => 2
trace('length ¥n: ' + string_from_code.split("¥n").length); // => 2

以上を踏まえて作るべき改行を削除するメソッド

function chomp(str:String):String {
  var CR:String = String.fromCharCode(13);
  var LF:String = String.fromCharCode(10);
  return str.split(CR).join('').split(LF).join('').split("¥r").join('').split("¥n").join('');
}

全体的に検証が足りない。AS3 では知らない。メモ代わりなので悪しからず。

コメントをどうぞ

このページのフィード
http://orz.cc/actionscript-cr-lf-difference-in-file-and-in-code/feed
トラックバックURL
http://orz.cc/actionscript-cr-lf-difference-in-file-and-in-code/trackback