(このパートはMacユーザーの方は読まなくてもたぶん大丈夫です)

Y!Widgetの中では、文字コードはUTF-8、改行コードはLFとなっているようです。 Windowsの標準では文字がShiftJIS、改行コードがCRLFとなっているので、相互に生成したファイルを受け渡そうとするとトラブルが生じます。

Windowsで書いたテキストファイルをWidgetで読み込むと文字化けした#

Windowsで普通に書いたファイルはShiftJISなので、Widgetには理解できません。
保存時にUTF-8で保存するように指定すれば大丈夫です。
逆に、Widgetが書くファイルはUTF-8なので、Windowsのメモ帳で読み込めます。
しかし、何かのログファイルとかみたいに文字コードを選んでいられない場合もありまして、この場合は高度な回避策が必要です。

ADODB.Stream を使って変換する#

Internet ExplorerにはADOというモジュールがあり、データベースの読み書きのほかに文字コードを変換する機能を備えています。
WindowsではIE以外のプログラムからもこの機能を借用することができ、それにはCOMという接続方式を使います。
下記はY!WidgetでADODB.Streamを表すCOMオブジェクトを作成し、予想される文字コードをShiftJISとしてテキストファイルを読み込みます。 Y!Widget3.1以前では不具合があるらしく動作しません。
//ADODB版
var pathFileFull = "c:\\someFile.txt";
var ado =COM.createObject( "ADODB.Stream" );
ado.Charset="SJIS";
ado.Type = 2;
ado.Open();
    ado.LoadFromFile(pathFileFull);
    var log = ado.ReadText();
    print (log);
ado.Close();

Windowsで書いたテキストファイルの改行を「/」などに置き換えられない#

someString.replace("\r\n","/")
とか書いて改行のある文字列を/区切りに置き換えようとしたのですが、これはうまくいきません。

最初のファイルは改行がCRLF なのですが、WidgetにOpenさせたところで、この文字列はLF改行に置き換えられてしまうのです。
よって

someString.replace("\n","/")
と改めるとうまくいきました。
Windows上で出力するとまたCRLFに変換されるので、問題があってもなかなか内部の変換に気がつきません。

Widgetでテキストファイルを作ってJmEditorで読んだら1行おきに空行が生じる#

JMEditorではWidgetの出力したテキストファイルを見ると、なぜか文字コードと改行の自動判定がUTF-8/LFとなってしまうようです。
結果として、CRの改行とLFの改行が二度効果を発揮して1行おきの改行に見えてしまうのです。対策は、他のエディタで試してみることです。メモ帳なら正常に開けます。

例題#

ログビューアを作成してみましょう。
読み込むファイルは"testlog.utf8"という名前にしておきます。
ファイルの形式は UTF-8/CRLF とします。
ここから、「総処理数aaaabbbbcccc<改行>」という行を抽出します。
var strLog = filesystem.readFile("test.log.utf8",false);

var pattern = new RegExp("総処理数.*\n","g");
var strResult=(strLog.match(pattern));
普通に考えると"総処理数.*\r\n"になりそうなものですが、Y!Widgetではこれが効きません。
たぶんfilesystem.readFile のところですでに文字コードがLFのみに置き換えられているのでしょう。
ということで、行末は<LF>で指定するといいようです。

Add new attachment

Only authorized users are allowed to upload new attachments.
« This page (revision-1) was last changed on 28-Nov-2007 23:43 by UnknownAuthor