& # 146; se está convirtiendo como “\ u0092” por nokogiri en ruby ​​sobre Rails

Tengo una página html que tiene la siguiente línea con algunas entidades html como “& # 146;”.

#Here I am not pasting whole html page content. just putting issue line only html_file = "....

they’re originally intended to describe the spread of of viral diseases, but they’re nice analogies for how web/SN apps grow.

..." doc = Nokogiri::HTML(html) body = doc.xpath('//body') body_content = body[0].inner_html puts body_content

Resultado:

 These terms come from the fields of medicine and biology they\u0092re originally intended to describe the spread of of viral diseases, but they\u0092re nice analogies for how web/SN apps grow. 

Quiero dejar estas entidades como están en lugar de cambiarlas a Unicode. Cualquier cosa, ¿me estoy perdiendo?

Gracias

 they’re 

está mal y debe ser evitado Si desea utilizar una comilla simple para reproducir la práctica tipográfica de renderizar apóstrofes como una cita inclinada, entonces el carácter correcto es U + 2019 MARCA DE CITA SIMPLE A LA DERECHA, que se puede escribir como o . O, si está utilizando UTF-8, simplemente incluya textualmente como ' .

debe referirse al carácter U + 0092, un carácter de control poco utilizado y sin sentido que normalmente se presenta como blanco o como un cuadro de glifo faltante. Y de hecho en XML, lo hace.

Pero en HTML (que no sea XHTML, que usa reglas XML), es una característica del navegador de larga data que hace referencia a los caracteres en el rango a Ÿ se malinterpretan como los caracteres asociados con los bytes 128 a 159 en la página de códigos de Windows Western (cp1252) en lugar de los caracteres Unicode con esos puntos de código. El estándar HTML5 finalmente documenta este comportamiento.

El problema es que Nokogiri no conoce esta peculiaridad, y toma la referencia de carácter 146 en su palabra, terminando con el carácter 146 ( \u0092 ) que realmente no quieres. Creo que Nokogiri está utilizando libxml2 para analizar HTML, por lo que, en última instancia, la solución adecuada sería la función htmlParseCharRef de htmlParseCharRef , para sustituir los caracteres 128–159.

Mientras tanto, quizás pueda intentar ‘arreglar’ las referencias de caracteres manualmente con la sustitución de cadenas en bruto como -> antes de analizar. Está un poco mal, pero al menos en HTML, el único otro lugar donde puede tener la secuencia de marcado sin ser una referencia de un personaje estaría en un comentario, así que espero que no importe si cambia el contenido accidentalmente también.

Has intentado cambiar

 ’ 

dentro

  

Creo que el analizador analiza el símbolo y luego lo acumula con el “# 146” y luego los analiza a los dos. aunque es solo una opinión … quiero que esto sea solo un comentario IDK cómo … jajaja

Bueno, obtuve la idea de focos en su post de respuesta aquí , y el Unicode de aquí .