Indy メモ (IdHTTP文字化け)

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の場合)

AuthorPortraitAlt
著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
作成日: 2008-09-30
Copyright © 1995–2025 iPentec all rights reserverd.