Question

J'ai un script Ruby qui génère un fichier CSV UTF8 à distance sur une machine Linux, puis le transfère sur une machine Windows via SFTP.

Je dois ensuite ouvrir ce fichier avec Excel, mais Excel n’obtenant pas le format UTF8, je dois donc toujours l’ouvrir dans un éditeur de texte capable de convertir le format UTF8 en ANSI.

J'aimerais faire cela par programme en utilisant Ruby et éviter l'étape de conversion manuelle. Quelle est la façon la plus simple de le faire?

PS: j’ai essayé d’utiliser iconv mais j’ai échoué.

Était-ce utile?

La solution

ascii_str = yourUTF8text.unpack("U*").map{|c|c.chr}.join

en supposant que votre texte tienne vraiment dans le jeu de caractères ascii.

Autres conseils

J'ai finalement réussi à le faire en utilisant iconv, je ne faisais que gâcher les paramètres. Alors, voici comment vous le faites:


require 'iconv'

utf8_csv = File.open("utf8file.csv").read

# gotta be careful with the weird parameters order: TO, FROM !
ansi_csv = Iconv.iconv("LATIN1", "UTF-8", utf8_csv).join

File.open("ansifile.csv", "w") { |f| f.puts ansi_csv }

C'est tout!

J'ai eu un problème similaire en essayant de générer des fichiers CSV à partir du contenu généré par l'utilisateur sur le serveur. J'ai trouvé la unidecoder gem qui fait un travail intéressant de translittération des caractères unicode en ascii.

Exemple:

"olá, mundo!".to_ascii                 #=> "ola, mundo!"
"你好".to_ascii                        #=> "Ni Hao "
"Jürgen Müller".to_ascii               #=> "Jurgen Muller"
"Jürgen Müller".to_ascii("ü" => "ue")  #=> "Juergen Mueller"

Pour notre cas d'utilisation simple, cela a bien fonctionné.

Pivotal Labs publie un excellent article sur la translittération unicode en ascii en discuter plus en détail.

Depuis Ruby 1.9, il existe un moyen plus simple:

yourstring.encode('ASCII')

Pour éviter les problèmes de caractères invalides (non-ASCII), vous pouvez les ignorer:

yourstring.encode('ASCII', invalid: :replace, undef: :replace, replace: "_")
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top