1

私は Delphi 2009 を同梱の Indy ライブラリ (10) と共に使用しており、TPageProducer を多用するレガシー アプリケーションをアップグレードしています。レガシー アプリは、もともと Delphi 5 / Indy 8 用に作成されました。

TPageProducer の OnHTMLTag プロパティを使用して、ソース内の HTML 透過タグを処理する関数を指定しています。私の問題は、Unicode (簡体字中国語) 文字を TPageProducer.HTMLDoc プロパティに入れると、OnHTMLTag コールバックが呼び出されたときに、TagParams 引数に ?? が含まれることでした。予想される漢字の代わりに。

これを HTTPApp.pas の 2053 行付近までたどりました。ここで、透過タグのキーと値のペアを分離しています。

procedure ExtractHeaderFields(Separators, WhiteSpace: TSysCharSet; Content: PChar;
  Strings: TStrings; Decode: Boolean; StripQuotes: Boolean = False);

...
if Decode then
  Strings.Add(string(HTTPDecode(AnsiString(DoStripQuotes(ExtractedField)))))
else
  Strings.Add(DoStripQuotes(ExtractedField));
...

文字列を AnsiString にキャストして HTTPDecode に渡すまでは問題ありません。この時点で、文字列リストに ?? が含まれます。私の最終的な TagParams と Web ページと同様に。

AnsiStrings の代わりに Strings で動作する HTTPDecode のバージョンが必要ですか? もしそうなら、どこでこれを見つけることができますか?

今のところ、TPageProducer のトークンを解析するときにデコード ルーチンを無効にしましたが、これは適切な修正ではなく、ワイド文字で動作するバージョンが必要です (可能であれば)。

4

0 に答える 0