web-dev-qa-db-fra.com

Écrire et lire un fichier avec encodage utf-8

J'ai lu toutes les questions et les articles de blog liés à l'UTF-8, et j'ai l'exemple suivant dans un fichier test.rb:

# 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

cela fonctionne parfaitement. est produit correctement le symbole © dans le fichier, et il me lit le © et l'imprime à l'écran.

mais lorsque j'utilise ce même code dans mon projet actuel, je le note dans le fichier au lieu du symbole ©: \u00A9

FWIW: J'obtiens ce résultat lors de l'exécution d'un test rspec (v1.2.9) avec mon code. la spécification produit un fichier avec un symbole ©, puis lit le fichier pour vérifier le contenu.

J'exécute cela en Ruby 1.9.2 pour le moment, mais je dois également prendre en charge tout le chemin du retour vers Ruby 1.8.6. Ceci est un environnement Windows avec des versions RubyInstaller.org de Ruby.

41
Derick Bailey

Si j'exécute votre code, j'obtiens une erreur sur le caractère spécial. Pouvez-vous essayer ce code?

# 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 

Sur ma boîte Windows, je reçois

#<Encoding:Windows-1252>
test © foo

Je ne sais pas pourquoi le  est là ..

46
peter

Lisez le fichier avec moins de code:

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

Sur quel OS fonctionne votre application? Il se peut que l'encodage par défaut du fichier soit ASCII. Est-ce que cela aide si vous ajoutez w:utf-8 et r:utf-8 aux paramètres ouverts?

2
ALoR