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

解決


nakatsu  2011-03-03 23:32:59  No: 40166

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

var strURL,strD:string;

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


HOta  2011-03-04 03:22:12  No: 40167

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


nakatsu  2011-03-04 04:31:26  No: 40168

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

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


最新のIndy10に  2011-03-04 07:41:00  No: 40169

質問のサイトの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 19:27:32  No: 40170

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


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加