J'écris un petit programme dans ruby, qui modifie essentiellement certains fichiers dans un fichier zip. Le fichier zip est spécifié en tant que paramètre sur la ligne de commande et interprété via le OptionParser.Problèmes d'encodage avec ruby lors de la lecture des arguments de la ligne de commande avec optparse
Le problème est que, lors de la spécification d'un fichier contenant des caractères non-ascii, le fichier ne peut pas être ouvert, indiquant qu'il n'a pu être trouvé. Ce problème se produit en utilisant cmd.exe
sous Windows.
Voici un exemple minimal:
# example.rb
require "zip"
require "optparse"
zip_file_name = String.new
# read and interprete command line arguments:
OptionParser.new do |opts|
opts.on("-f", "--file FILE", String, "The zip-file, which will be modified") do |f|
zip_file_name = f
end
end.parse!
# Open the zip file:
Zip::File.open(zip_file_name) do |zipfile|
end
Si vous créez un fichier zip test.zip
et exécuter example.rb -f test.zip
tout va bien (il ne se termine sans erreur). Faire la même chose avec un fichier zip täst.zip
me donne une erreur. J'ai essayé de faire zip_file_name.encode!(Encoding::UTF_8)
, mais cela n'a pas résolu le problème.
Cela semble être un problème d'encodage (l'encodage de zip_file_name est cp850) mais le transcodage ne semble pas fonctionner correctement. Donc, ma question serait: Comment puis-je changer mon programme pour permettre également les caractères non-ascii pour spécifier les fichiers sur la ligne de commande? L'ajout de zip_file_name.force_encoding(Encoding::Windows_1252)
avant d'ouvrir le fichier résout le problème (sur Windows Europe de l'Ouest).
Merci pour la réponse rapide - ça marche maintenant! Étrange, cependant, ce rubis suppose un mauvais encodage ... – SkWob