C++Builder 2009のTIdHTTP::Get(URL)はUnicodeStringを返すようになりました。
もしかして、文字コードを自動認識してくれるかも。
と期待して、動作を検証してみたところ、
//UTF-8のページを読み込む
Memo1->Lines->Text = IdHTTP1->Get("http://www.yahoo.co.jp/");
しっかりと、文字化けしました。
自分で文字コードを設定しなければならないようです。
//UTF-8のページを読み込む
std::unique_ptr<TMemoryStream> ms(new TMemoryStream());
IdHTTP1->Get("http://www.yahoo.co.jp/", ms.get());
ms->Position = 0;
Memo1->Lines->LoadFromStream(ms.get(), TEncoding::UTF8);
文字列で取得する場合。
// UTF-8のページを読み込む
std::unique_ptr<TMemoryStream> ms(new TMemoryStream());
IdHTTP1->Get("http://www.yahoo.co.jp/", ms.get());
UTF8String s = reinterpret_cast<char*>(ms->Memory);
//文字コードがShift_JISの場合
//AnsiStringT<932> s = reinterpret_cast<char*>(ms->Memory);
//文字コードがEUC_JPの場合
//AnsiStringT<20932> s = reinterpret_cast<char*>(ms->Memory);
UnicodeStringになって、面倒になったような気がします。
2011年4月13日追記
文字コードの変換には、IndyのReadStringFromStream関数を使って変換することもできます。
//文字コードがUTF-8の場合
UnicodeString s = ReadStringFromStream(ms.get(), ms->Size, TEncoding::UTF8);