2009-07-12 100 views
0

我刚刚在D2009我的手,并将其与我们现有的项目之一 - 它都编译好,但我刚刚拿起DIRegEx在项目中使用一些正则表达式。德尔福2009 - 隐式字符串RawByteString转换警告

但是,它总是将有关String的警告给RawByteString,反之亦然。 例如

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

现在,SetSubjectStr参数是RawByteString型的,并且从idHTTP.Get响应仅仅是字符串。这似乎很奇怪,我将不得不要么,做

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

那我在这里做。

回答

2

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