- ベストアンサー
Turbo Delphi での、unicode 出力について
お世話になります。 Turbo Delphi という体験版を入れてみました。 Delphi9 では、unicode をサポートしているようですが、 Turbo Delphi でも、WideString で、unicode を扱えるとのことですが、 実際にファイル出力の仕方がよく分りません。 WideString := 'abcABC'; として、 Writeln(TextFile, WideString); と出力しても、s_jis で出力されるようです。 何かご存知の方いらしたらお教えください。 宜しくお願い致します。
- みんなの回答 (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.
お礼
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 についても、勉強させていただきます。 ありがとうございました。