Tengo una situación en la que un resultado de Nokogiri tiene codificación hex en mis resultados. El problema es que la codificación real del resultado es UTF-8 , pero contiene caracteres hexadecimales:
Best 100+ Fishing Pictures | Download Free Images on Unsplash https%3A%2F%2Funsplash.com%2Fs%2Fphotos%2Ffishing&rut=d1dd8233a6ad628121fa36d8d5a51be0b6fb0eda75e234d5036bf7b49efcf25b current encoding: UTF-8 Fish Images | Free Vectors, Stock Photos & PSD https%3A%2F%2Fwww.freepik.com%2Ffree%2Dphotos%2Dvectors%2Ffish&rut=f68a290a96893c63f8849bc9e89152d97a632d7a95bbf5d0ca2e939b378fff68 current encoding: UTF-8 How to Use Fish vs. fishes Correctly https%3A%2F%2Fgrammarist.com%2Fusage%2Ffish%2Dfishes%2F&rut=e0897e219c9b0b125a1442b59e36c49753417a1b7812ae9d3ab0bc3179ffe6b5 current encoding: UTF-8 Las direcciones URL están codificadas técnicamente como UTF-8 , pero tienen caracteres hexadecimales. No he encontrado nada que los haya visto como hexadecimales para traducir a UTF-8 , por lo que no sé cómo reconocer esas agrupaciones de caracteres para la traducción. Aparte de escribir un método complejo que podría funcionar, pensé que vería si hay un reconocimiento forzado de la cadena original para luego traducirla usando force_encode o algo por el estilo.
¿Alguien tiene algún consejo sobre cómo lograr esto? Cualquier idea apreciada. Preferiría evitar tener que codificar manualmente estos caracteres en un método.
Actualización : CGI::unescapeHTML(<string>] no funciona:
irb(main):024:0> a => "https%3A%2F%2Fwww.freepik.com%2Ffree%2Dphotos%2Dvectors%2Ffish&rut=f68a290a96893c63f8849bc9e89152d97a632d7a95bbf5d0ca2e939b378fff68" irb(main):025:0> CGI::unescapeHTML(a) => "https%3A%2F%2Fwww.freepik.com%2Ffree%2Dphotos%2Dvectors%2Ffish&rut=f68a290a96893c63f8849bc9e89152d97a632d7a95bbf5d0ca2e939b378fff68" irb(main):026:0> CGI::unescapeHTML(a) == a => trueNo proporcionó la fuente de su "codificación del resultado es UTF-8, pero contiene caracteres hexadecimales" en la pregunta original. No creo entender esa pregunta.
En su actualización, usó el método incorrecto. unescapeHTML es para resolver entidades HTML:
irb(main):010:0> CGI.escapeHTML '<' => "<" irb(main):012:0> CGI.unescapeHTML '<' => "<"El método que debe usar es para decodificar secuencias de URL:
irb(main):017:0> encoded_url = "https%3A%2F%2Fwww.freepik.com%2Ffree%2Dphotos%2Dvectors%2Ffish&rut=f68a290a96893c63f8849bc9e89152d97a632d7a95bbf5d0ca2e939b378fff68" => "https%3A%2F%2Fwww.freepik.com%2Ffree%2Dphotos%2Dvectors%2Ffish&rut=f68a290a96893c63f8849bc9e89152d97a632d7a95bbf5d0ca2e939b378fff68" irb(main):018:0> CGI.unescape encoded_url => "https://www.freepik.com/free-photos-vectors/fish&rut=f68a290a96893c63f8849bc9e89152d97a632d7a95bbf5d0ca2e939b378fff68"Si eso no resuelve su problema real, me complace revisar dado un código fuente más depurable en la pregunta.