あなたは、サーバの生データを書き込みPost()
のバージョンを使用しています - TStream
にあります。 TMemoryStream
は単なるメモリバッファですが、文字列、文字、またはエンコーディングの概念はありません。サーバーが送信するのとまったく同じHTMLファイルを保存しています。 UTF-8、UTF-16、Ansiを使用しているかどうかに関係なく、
選択した特定のエンコーディングでファイルを保存する場合は、ダウンロード後にデータを自分で変換する必要があります。例えば、String
を返すPost()
のバージョンを使用して代わりにTStream
を充填することにより、あなたは、特定のTEncoding
なTEncoding::UTF8
などを使用してファイルにString
を保存するには、TStringList
またはTStringString
、またはSystem::Ioutils::TFile::WriteAllText()
メソッドを使用することができます。
またはサーバーがサポートしている場合は、TIdHTTP::Request::AcceptCharSet
プロパティを使用して、サーバーから受け入れようとしているcharsetを指定することができます。その場合、サーバーはそれに応じて応答をエンコードできます。その後、上記の元のコードを使用し続けることができます。
使用しているユニコードの種類を指定するのを忘れないでください。IE:WindowsではUTF-16、他のほとんどのシステムではUTF-8です。等。ダウンロードが指定されているサイトからの –
:content-type:text/html; charset = UTF-8 –
私は "TmemoryStream"クラスに慣れていませんが、どのAPIから来たのかを指定したいかもしれません - しかし、バイナリ出力を使ってファイルを保存するオプションはありますか? –