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 和网页也是如此。

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

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

4

0 回答 0