我一直在使用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解析我的令牌时禁用了解码例程,但它不是一个很好的解决方案,并且希望有一个适用于宽字符的版本(如果这是偶数的话)可能的)。