2010-09-10 14 views
5

Je viens de passer de Ruby 1.8 à 1.9, et la plupart de mes scripts de traitement de texte échouent maintenant avec l'erreur invalid byte sequence in UTF-8. Je dois supprimer les caractères non valides ou spécifier que Ruby devrait utiliser l'encodage ASCII à la place (ou quel que soit le codage que les fonctions C stdio écrivent, comment les fichiers ont été produits) - comment ferais-je l'une ou l'autre de ces choses?Lecture de fichiers ASCII avec Ruby 1.9 dans un environnement UTF-8

De préférence ce dernier, parce que (aussi près que je peux dire) il n'y a rien de mal avec les fichiers sur le disque - s'il y a des étranges, des caractères non valides, ils ne semblent pas dans mon éditeur ...

+0

est-il possible de changer le titre de la question? Puisque la réponse n'est plus à la question. Cheers ~ – lulalala

+1

Ah, bon appel. Terminé. – Doches

Répondre

1

Qu'est-ce vos paramètres régionaux définis dans le shell? Dans les systèmes basés sur Linux, vous pouvez vérifier cela en exécutant la commande locale et la modifier par ex.

$ export LANG=en_US 

Je suppose que vous utilisez les paramètres régionaux qui ont un codage UTF-8, ce qui est à l'origine Ruby supposer que les fichiers texte ont été créés selon des règles de codage UTF-8. Vous pouvez voir cela en essayant

$ LANG=en_GB ruby -e 'warn "foo".encoding.name' 
US-ASCII 
$ LANG=en_GB.UTF-8 ruby -e 'warn "foo".encoding.name' 
UTF-8 

Pour un traitement plus général de la façon dont le codage de chaîne a changé dans Ruby 1.9 Je recommande fortement http://blog.grayproductions.net/articles/ruby_19s_string

(exemples de code supposent shell bash ou similaire - les dérivés C-shell sont différent)

+1

Excellent. Je suppose que c'est ma punition karmique pour avoir enfilé des cordes en C sans se soucier de l'encodage, ou pour être un anglophone natif. – Doches

+0

@Doches: Donc, * vous êtes * le gars qui écrit toutes ces applications qui ne me laisseront pas utiliser mon vrai nom. BTW: admettre que vous avez un problème est le premier ... bla bla bla :-) –