J'utilise ce petit peu de rubis:encodage de fichier générant un caractère vide dans ruby - pourquoi?
File.open(ARGV[0], "r").each_line do |line|
puts "encoding: #{line.encoding}"
line.chomp.split(//).each do |char|
puts "[#{char}]"
end
end
Et j'ai un exemple de fichier que je l'alimentation dans le fichier ne contient que trois périodes et une nouvelle ligne.
Lorsque j'enregistre ce fichier avec un fileencoding de utf-8 (dans vim: set fileencoding=utf-8
) et exécuter ce script là-dessus je reçois cette sortie:
encoding: UTF-8
[]
[.]
[.]
[.]
Et si je change le fileencoding latin1 (dans vim: set fileencoding=latin1
) et exécutez le script, je ne comprends pas que le premier caractère vide:
encoding: UTF-8
[.]
[.]
[.]
Qu'est-ce qui se passe ici? Je comprends que l'encodage utf8 met quelques octets au début du fichier pour marquer le fichier comme encodé en utf8, mais je pensais qu'ils étaient supposés être invisibles lors du traitement du texte (ie: le runtime ruby était supposé les traiter). Qu'est-ce que je rate?
BTW:
ubuntu:~$ ruby --version
ruby 1.9.2p0 (2010-08-18 revision 29034) [i686-linux]
Merci!
Mise à jour:
dump Hex du fichier avec l'omble chevalier supplémentaire (la nomenclature):
ubuntu:~$ hexdump new.board
0000000 bbef 2ebf 2e2e 0a0d 0a0d
000000a
Le fichier enregistré avec le codage de fichier utf8 dans vim a "\ u {feff} au début de la sortie data.dump, et le fichier latin1 n'a rien. –
Donc, ce qui suggère que je suppose que ruby traite les fichiers comme utf8 indépendamment de ce qui est sur le disque, et de traiter incorrectement la nomenclature? (c'est-à-dire: le traiter comme un char, plutôt qu'un indice d'encodage) –
@Stewart - c'est la nomenclature utf-16, je ne sais pas pourquoi cela serait là. –