修补Delphi库以获得TPageProducer回调中的unicode支持?

时间:2012-04-13 20:42:13

标签: delphi winapi http indy

我一直在使用Delphi 2009和Indy库(10),它已经升级了大量使用TPageProducer的遗留应用程序。遗留应用程序最初是为Delphi 5 / Indy 8编写的。

我正在使用TPageProducer的OnHTMLTag属性来指定一个函数来处理源代码中的HTML透明标记。我的问题是,如果我在TPageProducer.HTMLDoc属性中放入unicode(简体中文)字符,当调用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和网页一样。

是否应该有一个与Strings而不是AnsiStrings一起使用的HTTPDecode版本?如果是这样,我可以在哪里找到它?

现在,我刚刚为TPageProducer解析我的令牌时禁用了解码例程,但它不是一个很好的解决方案,并且希望有一个适用于宽字符的版本(如果这是偶数的话)可能的)。

0 个答案:

没有答案