下記コードでソースを取得すると、日本語部分が文字化けします。
対策を教えて下さい。(WinXp-home,D7-pro)
var strURL,strD:string;
strURL:='http://finance.yahoo.co.jp/';
strD:=IdHTTP1.Get(strURL);
showmessage(strD);
エンコードを指定したら、どうでしょう。
HOta様ありがとうございます。
エンコードの指定とは、
Delphi2009のTEncodingクラスのことでしょうか?
あるいは
Indy10のIdHTTP1.Response.charset:='Shift_JIS';
のことでしょうか?
D7,Indy9.0でエンコードの指定は可能ですか?
質問のサイトの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 をインストールする)
簡単ではなさそうなので避けてきましたが、
Indy10の導入にチャレンジしてみようと思います。
ありがとうございました。
ツイート | ![]() |