激凹みから立ち直る方法

お世話になります。
Turbo Delphi という体験版を入れてみました。
Delphi9 では、unicode をサポートしているようですが、
Turbo Delphi でも、WideString で、unicode を扱えるとのことですが、
実際にファイル出力の仕方がよく分りません。
WideString := 'abcABC'; として、
Writeln(TextFile, WideString);
と出力しても、s_jis で出力されるようです。
何かご存知の方いらしたらお教えください。
宜しくお願い致します。

A 回答 (1件)

Windows XP SP3, Vista SP1 + Delphi2007 Proで試してみました。



Writeln(TextFile, WideString); ではおっしゃるとおりs_jisになってしまいました。おそらくstringに変換されてしまうのだと思います。型なしファイルのBlockWriteやTFileStreamのWriteを使うとUnicodeで書き込めます。

program WideString;
{$APPTYPE CONSOLE}
uses
Classes;
var
wstr: System.WideString;
mstr: string;
f: File;
fs: TFileStream;
begin
wstr:='123abcあいう123abc';
mstr:='456defかきく456def';
wstr:=wstr+mstr;

AssignFile(f, 'test.txt');
Rewrite(f, 1);
try
BlockWrite(f, wstr[1], length(wstr)*2);
finally
CloseFile(f);
end;

fs:=TFileStream.Create('testfs.txt', fmCreate);
try
fs.Write(wstr[1], length(wstr)*2);
finally
fs.Free;
end;
end.
    • good
    • 0
この回答へのお礼

SHIMAPEE様

回答ありがとうございました。
お礼が遅れ申し訳ございませんでした。

BlockWrite で、unicodeでの出力を確認しました。

先頭に、BOMを付けることを確認していました。

program Test;
{$APPTYPE CONSOLE}
uses
Classes;
var
f: File;
fpass: String;
str1: WideString;
begin
fpass := 'c:\xxxxxx.txt';
AssignFile(f, fpass);
ReWrite(f, 1);
str1 := WideChar($FEFF) + 'abcABC' + WideChar($000D) + WideChar($000A);
try
BlockWrite(f, str1[1], Length(str1) * 2);
finally
CloseFile(f);
end;
end.

として、出力が確認できました。文法をよく理解できていないので、
時間がかかってしまいました。

今現在、まだ、手が回りませんが、TFileStream についても、勉強させていただきます。
ありがとうございました。

お礼日時:2008/11/11 17:22

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!