2016-03-22 21 views
1

ファイルを保存、Unicode文字は、例えば文字エンコーディングファイルを正しいエンコーディングで保存する方法は?

TMemoryStream *MS = new TMemoryStream; 
TStringList *list = new TStringList; 
list->Add(u"call=expose_full"); 
IdHTTP1->Post(u"URL", list, MS); 
MS->SaveToFile("1.html"); 

として格納されている「ラファエラ統計u00e9tico ATL \」

+0

使用しているユニコードの種類を指定するのを忘れないでください。IE:WindowsではUTF-16、他のほとんどのシステムではUTF-8です。等。ダウンロードが指定されているサイトからの –

+0

:content-type:text/html; charset = UTF-8 –

+0

私は "TmemoryStream"クラスに慣れていませんが、どのAPIから来たのかを指定したいかもしれません - しかし、バイナリ出力を使ってファイルを保存するオプションはありますか? –

答えて

1

あなたは、サーバの生データを書き込みPost()のバージョンを使用しています - TStreamにあります。 TMemoryStreamは単なるメモリバッファですが、文字列、文字、またはエンコーディングの概念はありません。サーバーが送信するのとまったく同じHTMLファイルを保存しています。 UTF-8、UTF-16、Ansiを使用しているかどうかに関係なく、

選択した特定のエンコーディングでファイルを保存する場合は、ダウンロード後にデータを自分で変換する必要があります。例えば、Stringを返すPost()のバージョンを使用して代わりにTStreamを充填することにより、あなたは、特定のTEncodingTEncoding::UTF8などを使用してファイルにStringを保存するには、TStringListまたはTStringString、またはSystem::Ioutils::TFile::WriteAllText()メソッドを使用することができます。

またはサーバーがサポートしている場合は、TIdHTTP::Request::AcceptCharSetプロパティを使用して、サーバーから受け入れようとしているcharsetを指定することができます。その場合、サーバーはそれに応じて応答をエンコードできます。その後、上記の元のコードを使用し続けることができます。

関連する問題