Lecture de fichiers UTF-8

Bonjour a tous,

Bien decidé a traduire un site en quelques langue, je me suis essayé
avec succés au plugin Globalize.
Maintenant, j’essaye de créer un petit programme qui lit les
traductions pour les mettres dans la base, or je n’arrive déséperement
pas à ouvrir un fichier en UTF-8.

Un code du style:
f=File.open “monfichier.csv”
result=f.gets

ne me donne pas “en” comme prevu (le debut de mon fichier) mais r ´╗┐
“en”, c’est a dire les octets de l’entête UTF-8. La suite est Ã
l’identique, si j’ai un caractère de type éà è il est intrepreté en
ASCII mais pas en UTF-8

Bref, tous se passe comme si mon fichier n’etait pas ouvert en mode
UTF-8. J’ai essayé de trouver de la doc la dessus, mais pas grand
chose…


Thomas L.
http://blog.landspurg.net

Bonjour Thomas,

Maintenant, j’essaye de créer un petit programme qui lit les
traductions pour les mettres dans la base, or je n’arrive déséperement
pas à ouvrir un fichier en UTF-8.

Quand tu parles de petit programme, tu veux dire que tu as créé un
script .rb que tu fais tourner en dehors de Rails, c’est ça ?
Si c’est bien ça et à moins que tu charges l’environment.rb de Rails,
ruby ne travaillera pas en UTF-8 par défaut:

Stitch:~/Work thbar$ irb
irb(main):001:0> $KCODE
=> “NONE”

Par contre si tu ouvres ruby script/console dans ton application
Rails, tu auras:

Stitch:~/Work thbar$ ruby script/console
Loading development environment.

$KCODE
=> “UTF8”

car Rails initialise KCODE à ‘UTF8’ lui même (enfin depuis quelques
temps). Tu devrais obtenir ce que tu attends dans un puts result.

J’ai plusieurs suggestions à te faire:

  • utiliser FasterCSV (http://fastercsv.rubyforge.org/) pour parser le
    CSV
  • te placer dans une tache Rake pour tout ce qui concerne les taches
    périphériques, afin de bénéficier des réglages de Rails (ex: UTF-8)
    mais aussi de tous tes modèles ActiveRecord

Voici un début d’exemple (que tu peux placer sous lib/tasks/
monfichier.rake pour le rendre disponible sous rake directement)

require ‘fastercsv’

namespace :mycompany do
desc “Pick up all translations from xxx.csv and load them in the
database”
task :fill_all_translations do
FasterCSV.open(‘test.txt’) …
MyRecord.create!(:title => row…)
end
end
end

Tu pourras alors t’en servir en invoquant rake
mycompany:fill_all_translations.
Je réalise une grande partie de mes tâches de maintenance de cette
façon, c’est très pratique.

a+!

Thibaut Barrère

LoGeek
http://www.dotnetguru2.org/tbarrere/

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs