He conseguido normalizar una URL de esas con símbolos % y códigos hexadecimales. Por ejemplo:
Código:
"https%3A%2F%2Fes.noticias.locas.com%2Fdescubren-un-jupitiano-en-j%C3%BApiter-666999.html"
(no te molestes en ir que no existe, es inventado)
Agradezco la ayuda al foro y en especial a Elektro que me ha resuelto el tema de pasar un código UTF8 a Unicode.
Código
Option Strict Off Imports System.Text.RegularExpressions Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim strUrl As String = ("https%3A%2F%2Fes.noticias.locas.com%2Fdescubren-un-ni%C3%B1o-jupitiano-en-j%C3%BApiter-666999.html") 'Enlace MsgBox(NormalizarURL(strUrl)) End Sub Public Function NormalizarURL(ByVal strUrl as String) As String 'strUrl = strUrl.Replace("%3A%2F%2F", "://") Dim PatternUTF8_1 As String = "(%..%..?)" 'Expresiones regular Dim PatternUTF8_2 As String = "(%..?)" 'Expresiones regulares Dim MyRegexUTF8_1 As New Regex(PatternUTF8_1, RegexOptions.IgnoreCase) 'Regex para doble PatternUTF8_1 Dim MyRegexUTF8_2 As New Regex(PatternUTF8_2, RegexOptions.IgnoreCase) 'Regex para doble PatternUTF8_2 Dim MyMatchUTF8_1 As Match = MyRegexUTF8_1.Match(CStr(strUrl)) Dim MyMatchUTF8_2 As Match = MyRegexUTF8_2.Match(CStr(strUrl)) While MyMatchUTF8_1.Success Dim UTFChar As String = MyMatchUTF8_1.Groups(0).Value 'Obtiene el primer valor de cada coincidencia Dim HexChar1 As Byte = CType(Convert.ToInt32(UTFChar.Substring(1, 2), 16), Byte) 'Obtiene el valor entero del primer valor hexadecimal obtenido del código utf-8 Dim HexChar2 As Byte = CType(Convert.ToInt32(UTFChar.Substring(4, 2), 16), Byte) 'Obtiene el valor entero del segundo valor hexadecimal obtenido del código utf-8 '//Convierte carácter hexadecimal UTF-8 a UNICODE por ejemplo "C3 BA" a "ú" Dim CharUnicode As String = System.Text.Encoding.UTF8.GetString(New Byte() {HexChar1, HexChar2}) strUrl = strUrl.Replace(UTFChar, CharUnicode) 'Reemplaza el carácter hexadecimal UTF-8 por Unicode MyMatchUTF8_1 = MyMatchUTF8_1.NextMatch() 'Continúe el bucle hasta la siguiente coincidencia. End While While MyMatchUTF8_2.Success Dim UTFChar As String = MyMatchUTF8_2.Groups(0).Value '//Convierte y remplaza un carácter hexadecimal a Unicode por ejemplo "2F" a "/" strUrl = strUrl.Replace(UTFChar, Convert.ToChar(Convert.ToInt32(UTFChar.Substring(1, 2), 16))) MyMatchUTF8_2 = MyMatchUTF8_2.NextMatch() 'Continúe el bucle hasta la siguiente coincidencia. End While Return CStr(strUrl) End Function End Class
Saludos