2009-07-12 10 views
0

Je viens de mettre la main sur D2009 et de l'utiliser avec l'un de nos projets existants - tout compile bien mais je viens de prendre DIRegEx pour utiliser une regex dans le projet. Toutefois, il émet toujours des avertissements à propos de String sur RawByteString et vice versa. Par exemple, Delphi 2009 - Chaîne implicite aux avertissements de conversion RawByteString

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

Maintenant, le paramètre SetSubjectStr est de type RawByteString, et la réponse de idHTTP.Get est juste chaîne. Il semble étrange que j'aurais soit, faire

ou

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

Que dois-je faire ici.

Répondre

0
+0

Merci, j'ai lu cette page plus tôt et il a dit «Essentiellement, RawByteString désactive la conversion implicite. ce qui n'est pas ce que je vois ci-dessus. – Wizzard

+0

RawByteString n'effectue pas de conversions implicites lorsqu'il est affecté à/à partir d'autres types de chaînes Ansi. Ce n'est pas le cas dans votre code. Vous affectez un UnicodeString à un RawByteString. Une conversion implicite est en cours (à moins que vous ne l'ayez saisie). –

2

Étant donné que DIRegEx n'accepte pas clairement l'entrée Unicode, vous n'avez pas d'autre choix que d'effectuer une sorte de conversion de données depuis ce que vous téléchargez en ligne vers ce que vous transmettez à DIRegEx. TIdHTTP effectue déjà ses propres conversions en interne à partir du codage d'origine des données (tel que spécifié par le serveur) vers Unicode avant de vous transmettre les données finales. Si vous voulez opérer sur les octets bruts que le serveur envoie, sans que les interprétations internes de TIdHTTP lui soient appliquées, alors vous devrez passer un TMemoryStream à TIdHTTP pour recevoir la sortie brute, et ensuite faire tout ce dont vous avez besoin avec.

Questions connexes