2010-10-29 14 views
6

tengo que leer algunos archivos de texto con el siguiente contenido:Convertir una cadena Unicode escapado a sus caracteres en Ruby 1.8

\ u201CThe vendedor ambulante Señora de Cushing Cruz \ u201D

En Ruby 1.9 terminal, cuando crear una cadena con este contenido:

ruby-1.9.1-p378 > "\u2714 \u2714 my great string \u2714 \u2714" 
=> "✔ ✔ my great string ✔ ✔" 

En ruby ​​1.8, no consigo los códigos Unicode convertidos a sus personajes:

ree-1.8.7-2010.01 > "\u2714 \u2714 my great string \u2714 \u2714" 
=> "u2714 u2714 my great string u2714 u2714" 

¿Hay alguna manera fácil de devolver los caracteres de cadena correctos en Ruby 1.8?

Respuesta

5

El enfoque más sencillo podría ser el uso de un analizador JSON, como JSON pasa a utilizar este mismo formato:

irb(main):014:0> JSON '["\u2714 \u2714 my great string \u2714 \u2714"]' 
=> ["\342\234\224 \342\234\224 my great string \342\234\224 \342\234\224"] 
6

Para cualquier otra persona que se topa con esta pregunta (como yo) en busca de una respuesta, el equivalente La forma de hacerlo en Ruby 1.8 sería:

["2714".to_i(16)].pack("U*") 
1

Esto se basa en la respuesta de @ Dave. Estoy usando el siguiente para reemplazar todas las secuencias de escape Unicode en una cadena dada por el carácter correspondiente:

string_value.gsub(/\\u([0-9a-fA-F]{4})/) {|m| [$1.hex].pack("U")} 

Es una expresión regular que busca "\ u" seguida de 4 símbolos hexadecimales. Luego descarta el "\ u", convierte los 4 símbolos hexadecimales a un número entero y usa el paquete para obtener el carácter Unicode. Reemplaza cada secuencia de escape con el carácter correspondiente y devuelve la cadena resultante.

Le dará problemas si su cadena se ha escapado más (por ejemplo, al tener "\" escapado como "\\"). Pero en el caso vainilla debería funcionar bien.

Cuestiones relacionadas