2016-04-18 11 views
1

Delphi 7を使用しています。メモをUnicodeテキストファイルとして保存するにはどうすればいいですか?UTF-8テキストファイルとして保存する例がありますが、ファイルを保存する例が必要です。ユニコードとして。 ありがとうございましたメモをユニコードとして保存する方法

答えて

4

ユニコードをサポートするコントロールを使用する必要があります。 Delphi 7 TMemoはありません。つまり、本当の問題はあまりコンテンツを保存するのではなく、最初にコンテンツを受け入れることです。

これは、TNT Unicodeコンポーネントに切り替えることで対処する必要があります。 TNT Unicode componentsの使用を開始すると、TNT Unicodeメモでは内容をUnicodeとして保存することができます。

2

UTF-8は、ユニコードです。これは、Unicodeデータのバイトコード体系です。実際にファイルをUTF-8の代わりにUTF-16として保存する必要がある場合は、別の質問です。

最適なオプションは、Unicodeベースのメモコントロールを使用して、Unicodeデータを処理することです。現代のUnicodeベースのDelphiバージョン(Delphi 2009以降)にアップグレードして、Unicode変換を処理してください。古いANSIベースのDelphiバージョン(Delphi 2007以前)を使用している場合は、Davidが提案したように、サードパーティのUnicode UIコントロールを使用する必要があります。

ただし、ネイティブのVCL ANSIベースのメモを使用すると、依頼内容を達成できます。コード内で手動で変換を管理するだけで済みます。 WideString文字列型(内部でMultiByteToWideChar()を使用してANSIデータをUTF-16に変換する)を使用してTMemoのANSIベースのデータをUTF-16に変換し、UTF-16データをファイルに書き込むことができます。例えば

var 
    BOM: WideChar; 
    FS: TFileStream; 
    WS: WideString; 
    I: Integer; 
begin 
    FS := TFileStream.Create('MyUnicodeFile.txt', fmCreate); 
    try 
    BOM := $FEFF; 
    FS.WriteBuffer(BOM, SizeOf(BOM)); 
    For I := 0 to Memo1.Lines.Count-1 do 
    begin 
     WS := WideString(Memo1.Lines[I] + sLineBreak); 
     FS.WriteBuffer(PWideChar(WS)^, Length(LS) * SizeOf(WideChar)); 
    end; 
    finally 
    FS.Free; 
    end; 
end; 
関連する問題