【问题标题】:Delphi 2009 - Implicit string to RawByteString conversion warningsDelphi 2009 - 隐式字符串到 RawByteString 转换警告
【发布时间】:2009-07-15 18:18:04
【问题描述】:

我刚刚接触到 D2009,并将它与我们现有的项目之一一起使用 - 它编译得很好,但是我刚刚拿起 DIRegEx 来在项目中使用一些正则表达式。

但是,它总是向 RawByteString 发出有关 String 的警告,反之亦然。 例如

var
  Response : string;
begin
  Response := idHTTP.Get('http://www.somesite.com');
  DIRegEx.SetSubjectStr(Response);
  ......

现在,SetSubjectStr 参数是 RawByteString 类型,来自 idHTTP.Get 的响应只是字符串。看起来很奇怪,我也会有,做

DIRegEx.SetSubjectStr(utf8string(Response));

var
  Response : Utf8String;
begin
  Response := Utf8String(idHTTP.Get......);

我应该在这里做什么。

【问题讨论】:

    标签: delphi unicode delphi-2009 rawbytestring


    【解决方案1】:

    由于 DIRegEx 显然不接受 Unicode 输入,因此您别无选择,只能将在线下载的数据转换为传递给 DIRegEx 的数据。在将最终数据传递给您之前,TIdHTTP 已经在内部进行了自己的从数据的原始编码(由服务器指定)到 Unicode 的转换。如果您想对服务器发送的原始字节进行操作,而不对其应用 TIdHTTP 的内部解释,那么您必须将 TMemoryStream 传递给 TIdHTTP 以接收原始输出,然后对它进行任何您需要的操作。

    【讨论】:

      【解决方案2】:

      【讨论】:

      • 谢谢,我之前读过那个页面,上面写着“基本上,RawByteString 禁用了隐式转换。”这不是我在上面看到的。
      • RawByteString 在分配给/从其他 Ansi 字符串类型时不执行隐式转换。在您的代码中并非如此。您正在将 UnicodeString 分配给 RawByteString。正在执行隐式转换(除非您将其强制转换)。
      猜你喜欢
      • 1970-01-01
      • 2010-09-21
      • 2023-04-06
      • 2011-01-01
      • 1970-01-01
      • 2011-07-23
      • 2020-01-04
      • 1970-01-01
      相关资源
      最近更新 更多