ウェブページのソース表示で文字化けを避けるには?

解決


nakatsu  2011-03-03 14:32:59  No: 40166  IP: 192.*.*.*

下記コードでソースを取得すると、日本語部分が文字化けします。
対策を教えて下さい。(WinXp-home,D7-pro)


var strURL,strD:string;

strURL:='http://finance.yahoo.co.jp/';
strD:=IdHTTP1.Get(strURL);
showmessage(strD);

編集 削除
HOta  2011-03-03 18:22:12  No: 40167  IP: 192.*.*.*

エンコードを指定したら、どうでしょう。

編集 削除
nakatsu  2011-03-03 19:31:26  No: 40168  IP: 192.*.*.*

HOta様ありがとうございます。
エンコードの指定とは、
Delphi2009のTEncodingクラスのことでしょうか?
あるいは
Indy10のIdHTTP1.Response.charset:='Shift_JIS';
のことでしょうか?

D7,Indy9.0でエンコードの指定は可能ですか?

編集 削除
最新のIndy10に  2011-03-03 22:41:00  No: 40169  IP: 192.*.*.*

質問のサイトのCharSetはUTF8だから、以下のUtf8ToSjis関数でShiftJISへの変換は出来る。

//「BOMなし」の場合
function Utf8NToSjis(const s: string): string;
var
  Len: integer;
  OutPwc: PWideChar;
  SIn: string;
begin
  Result := '';
  SIn := S + #0#0;
  Len := MultiByteToWideChar(CP_UTF8, 0, PChar(SIn), Length(SIn), nil, 0);
  if Len = 0 then
   raise Exception.Create('指定のUTF8文字列の変換は出来ません.');
  OutPwc := AllocMem(Len * 2);
  try
   MultiByteToWideChar(CP_UTF8, 0, PChar(SIn), Length(SIn), OutPwc, Len);
   WideCharToStrVar(OutPwc, Result);
  finally
   FreeMem(OutPwc);
  end;
end;
//「BOMあり」の場合
function Utf8ToSjis(const s: string): string;
var
  ss: string;
begin
  ss := s;
  Delete(ss, 1, 3);
  Result := Utf8NToSJis(ss);
end;

でもこの際、最新のIndy10に入れ替えた方がいいと思うけど。
http://ht-deko.minim.ne.jp/tech034.html(DEKOさんのページ)
(ANSI 版 Delphi (5〜2007) に最新版の Indy10 をインストールする)

編集 削除
nakatsu  2011-03-04 10:27:32  No: 40170  IP: 192.*.*.*

簡単ではなさそうなので避けてきましたが、
Indy10の導入にチャレンジしてみようと思います。
ありがとうございました。

編集 削除