Win32 SJIS(〜Delphi2007? )で、Idhttp.Getすると壊れる理由

編集:2010年12月21日
執筆:2010年12月20日

今日のお題は、?

使用したバージョン: Indy version 10.5.8

IdHttp.Get(URL)が
いつの間にか文字コードが自動変換になりました。

Delphi2009より前のDelphiでのIndy文字化け
デフォルトがencASCIIのため 文字が破壊され ? に なってしま います。
※Delphi2009以降は、UTF8で呼ばれるので、この問題はないと思います。

英文圏がデフォルトのため、
 Win32 SJISベースのDelphi(〜2007?まで)の場合は、変更が必要です。
IdGlobal.GIdDefaultAnsiEncoding := encOSDefault;
IdGlobal.GIdDefaultAnsiEncoding := encUTF8;
 のお好きなほうを、プログラムの最初や随時変更が必要なところで呼びます。
 グローバル変数なので、毎回変更がいらない場合は、1回よべば十分です。
  TIdhttpに限らず、TIdMailなどで変なときは、試してみる価値はあります。
 Delphi2009以降の最新版は、UTF8ベースなので、こういう変更はいらないと思います。

  グローバル変数をいじる方がコードの書き換えが少なくてすみます。
  画像などをIdHTTP1.Get(url)で取得していた場合は、コードを修正する必要があります。

» 続きを読む