Indy メモ (IdHTTP文字化け) - Delphi 2009
Delphi2009ではIndy10 の IdHTTPを使ってHTTPドキュメントを取得すると、HTTPドキュメントのエンコード方法によっては、文字が化けてしまうことがあります。
これは、IdHTTPのGetメソッドの奥底で下記のコードがあるためです。
IdGlobal BytesToString
if AEncoding = en8bit then
begin
SetLength( Result, LLength);
for i := AStartIndex to LLength - 1 do begin
Result[ i + 1] := Char(AValue[ i]);
end;
end
AEncodeingが en8bitの場合
ソケットから読み取ったバッファをすべて2バイトCharとして処理していますので、Shift-JISの2バイト全角文字も4バイトに分割されてしまい、文字が化けます。
問題を回避するには、いったんRawByteStringに積みなおすといった処理が必要です。
var
rs:RawByteString;
s:string;
begin
s:=DataModule1.idhttp1.Get('http://xxxxxxxxx');
SetLength(rs,Length(s));
for i:=1 to Length(s)-1 do begin
rs[i]:=AnsiChar(s[i]);
end;
s:=rs;
とすれば、文字化けせずに読み込めます(Shift-JISの場合)
著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用