2011-03-02 16 views
31

He estado leyendo sobre todas las cuestiones relacionadas con UTF-8 y blogs, y tengo el ejemplo siguiente en un archivo test.rb:escribir y leer un archivo con codificación UTF-8

# encoding: UTF-8 
File.open("test.txt", "w") do |f| 
    f.write "test © foo" 
end 

File.open("test.txt", "r") do |f| 
    puts f.read 
end 

esto funciona perfectamente. produce el símbolo © correctamente en el archivo, y me lo lee de vuelta y lo imprime en la pantalla.

pero cuando se utiliza este mismo código en mi proyecto actual, me sale este escrito en el archivo en lugar del símbolo ©: \u00A9

Fwiw: Estoy recibiendo este resultado cuando se ejecuta una rspec (v1.2.9) prueba contra mi código. la especificación produce un archivo con un símbolo © y luego vuelve a leer el archivo para verificar el contenido.

Estoy ejecutando esto en Ruby 1.9.2 por el momento, pero también tengo que apoyar todo el camino de regreso a Ruby 1.8.6. Este es un entorno de Windows con las versiones de RubyInstaller.org de Ruby.

Respuesta

2

¿En qué SO se ejecuta la aplicación? Podría ser que la codificación predeterminada para el archivo sea ASCII. ¿Ayuda si agrega w:utf-8 y r:utf-8 a los parámetros abiertos?

+0

I intenté las sugerencias de codificación como sugieres, y eso no pareció marcar la diferencia al ejecutar las pruebas RSpec. Actualicé mi pregunta para incluir también la versión de Ruby/información de la plataforma. tal vez necesito actualizar a rspec 2.x –

37

Si ejecuto su código me sale un error en el carácter especial. ¿Puedes probar este código?

# encoding: UTF-8 
File.open("test.txt", "w:UTF-8") do |f| 
    f.write "test \u00A9 foo" 
end 

#Encoding.filesystem = "UTF-8" 
p Encoding.find("filesystem") 
File.open("test.txt", "r:UTF-8") do |f| 
    puts f.read 
end 

En mi caja de ventanas i luego obtener

#<Encoding:Windows-1252> 
test © foo 

no tengo ni idea de por qué el A es allí ..

+3

¿En qué consola ejecutas ruby? Si es el símbolo del sistema de Windows, no comprende UTF-8, por lo que su salida UTF-8 se muestra en una aplicación Windows CP-1252. –

+1

Nota: se puede leer UTF-8 con mayor precisión con 'text = File.open (filename, 'r: UTF-8', &: read)' – Phrogz

+0

gracias por traer la respuesta de tokhi a mi atención Phrogz – peter

34

Leer el archivo con menos código:

# encoding: UTF-8 
file_content = File.open("test.txt", "r:UTF-8", &:read) 
+0

nice tokhi, lacónico y compatible legible y perfecto – peter

Cuestiones relacionadas