« C++0x explicit 変換演算子 | メイン | 業務連絡、引っ越しします »

C++Builder 2009のTIdHTTP::Getの文字コードの処理を検証した

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になって、面倒になったような気がします。

トラックバック

このエントリーのトラックバックURL:
http://www.gesource.jp/mt/mt-tb.cgi/842

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)

About

2008年10月18日 22:13に投稿されたエントリーのページです。

ひとつ前の投稿は「C++0x explicit 変換演算子」です。

次の投稿は「業務連絡、引っ越しします」です。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。

Powered by
Movable Type 3.35