Domanda

Durante l'analisi HTML per alcune pagine web (in particolare, tutte le finestre vivono pagina) ho incontrato un sacco di URL nel seguente formato.

http \ X3A \ x2F \ x2fjs.wlxrs.com \ x2fjt6xQREgnzkhGufPqwcJjg \ x2fempty.htm

Questi sembrano essere parzialmente UTF8 stringhe escape (\ x2F = /, \ X3A = :, ecc ...). C'è un'API .Net che può essere utilizzato per trasformare queste stringhe in uno System.Uri? Sembra abbastanza facile da analizzare, ma sto cercando di evitare di costruire una nuova ruota oggi.

È stato utile?

Soluzione

Quello che hai postato non è HTTP valido. Come tale, ovviamente HttpUtility.UrlDecode() non funzionerà. Ma indipendentemente da questo, si può trasformare questo in testo normale, in questo modo:

string input = @"http\x3a\x2f\x2fjs.wlxrs.com\x2fjt6xQREgnzkhGufPqwcJjg\x2fempty.htm";
string output = Regex.Replace(input, @"\\x([0-9a-f][0-9a-f])",
    m => ((char) int.Parse(m.Groups[1].Value, NumberStyles.HexNumber)).ToString());

meno di notare che questo presuppone che la codifica è Latin-1 piuttosto che UTF-8. L'ingresso che hai fornito è inconcludente in questo senso. Se avete bisogno di UTF-8 a lavorare, è necessario un percorso leggermente più lungo; dovrete convertire la stringa in byte e sostituire le sequenze di escape con i byte rilevanti nel processo (probabilmente ha bisogno di un ciclo while), e quindi utilizzare Encoding.UTF8.GetString() sulla matrice di byte risultante.

Altri suggerimenti

Questa è un'altra soluzione: (come continua da @timwi soluzione)

string output = Regex.Replace(input, @"\\x([0-9a-f][0-9a-f])",
            m => ((char)Convert.ToInt32(m.Groups[1].Value, 16)).ToString());
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top