2009-07-12 42 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以接收原始輸出,然後根據需要執行任何操作。