Widget 4.5以降について#

テキストファイルから読み込む際の注意#

Windowsで実行されるWidget Engine は、改行コードを自動的に\n(LF)に変換するのをやめて \r\n(CRLF)のままで取り扱うようです。

検索するとき#

よって、改行部分を検索する際に
var reg = new RegExp(".*\n");
と書くと反応しなくなり
var reg = new RegExp(".*\r\n");
var reg = new RegExp(".*\r");
と書くと反応するらしいです?

TextAreaに表示させる#

テキストエリアに改行を含む文字列を書くとしたらどうすればいいでしょう?
myTextArea.data="美\r人"
改行されました。
myTextArea.data="美\n人"
これも改行されました。
myTextArea.data="美\r\n人"
1行余計な改行が入りました。

ダンプする#

内部でどうなっているのかダンプさせてみました。

(strDump関数はわたしのオリジナルなので↑のAttachから拾ってください。)

>a = "美\r人\n秘\r\n書"
>strDump(a)
length: 8
美 : 32654
 : 13(\r)
人 : 20154
 : 10(\n)
秘 : 31192
 : 13(\r)
 : 10(\n)
書 : 26360
まず、文字列変数に流し込んだだけなら変換は発生していないようです。
myTextArea.data="美\r人\n秘\r\n書"
>strDump(myTextArea.data)
length: 8
美 : 32654
 : 10
人 : 20154
 : 10
秘 : 31192
 : 10
 : 10
書 : 26360
ここからわかることは、\r でも\n でも、表示部に流しこんだら\rは\nに置換されているということです。

これをファイルに保存してみましょう。

filesystem.writeFile("d:/美人秘書.txt",myTextArea.Data)

文字コードの判定がわかりやすいので愛用しているJMEditにかけると、このように表示されます。このファイルの改行はすべてLFで、秘書の間には2個のLFがあるということです。

美
人
秘

書
(JMEditorの判定:UTF-8 LF)

Windowsのメモ帳にかけると

美人秘書
と、改行はまったく認識されません。 (これを「名前を付けて保存」しても、LFの改行は除去されません。JMEditorで読ませるとまた改行が復活するという興味深い動作が見られます)

このメカニズムのために、"\r\n"というWindowsで標準的な改行コードで作られたファイルを読み込んでTextAreaに表示して、また保存すると、"\r\n"で書いた部分が二重改行にされてしまうことがわかりました。

対処は、テキストファイルを読み込んで真っ先に"\r\n"を"\n"1個に修正してから表示することで、また保存時には"\n"を"\r\n"に変換してあげることになります。

newText = myTextArea.replace(new RegExp("\n","mg"),"\r\n");

という感じでしょうか?

テキストファイルに書き込む際の注意#

Widget 4.0以前について#

Yahoo Widget はMac OS X 由来のソフトであるためか、内部の文字コードが「UTF-8 / LF」となっているようです。ちなみにWindowsで普通にメモ帳を使うと「Shift_JIS / CRLF」となります。

普通にテキストファイルをfilesystem.writeFile()などで書き出してしまうとUTF-8はまだいいとして、LF->CRLFはどうしたものかというと

//runCommand("more " + pathTempFile + " > " + pathDestFile);
//(Konfabulatorフォーラムの受け売り)

//こちらのほうがスマート
function saveCRLF(pathFrom, pathTo) {
	var strCommand ='sed -e "s/$/\r/" '+pathFrom+" >"+ pathTo;
	runCommand(strCommand);
}
というような手段になるらしいです。 もうちょっとスマートな方法はないものでしょうか。

Add new attachment

Only authorized users are allowed to upload new attachments.
« This page (revision-4) was last changed on 21-Aug-2009 17:20 by kei