2011-03-02 13 views
31

utf-8 kodlaması ile bir dosyayı okumak ve bir test.rb dosyasında şu örneği var:Yaz ve tüm UTF-8 ile ilgili sorular ve blog yazılarda okuyordum

# encoding: UTF-8 
File.open("test.txt", "w") do |f| 
    f.write "test © foo" 
end 

File.open("test.txt", "r") do |f| 
    puts f.read 
end 

bu, mükemmel çalışır. dosyada © sembolünü doğru şekilde üretir ve © bana geri okur ve ekranda yazdırır. \u00A9

FWIW: Bir RSpec çalıştırırken ben bu sonucu alıyorum (v1.2.9 ama benim asıl projede bu aynı kodu kullandığınızda, ben yerine © sembolünün dosyaya yazılır bu olsun

) koduma karşı test edin. spec, içinde bir © simgesi bulunan bir dosya üretir ve sonra içeriği kontrol etmek için dosyayı tekrar okur.

Bunu şu anda Ruby 1.9.2'de çalıştırıyorum ama aynı zamanda Ruby 1.8.6'ya kadar tüm yolu desteklemem gerekiyor. Bu Ruby'nin RubyInstaller.org sürümleriyle bir Windows ortamıdır.

cevap

2

Uygulamanız hangi işletim sisteminde çalışır? Bu dosya için varsayılan kodlama ASCII olabilir. Açık parametrelere w:utf-8 ve r:utf-8 eklerseniz yardımcı olur mu?

+0

ben Önerdiğiniz gibi kodlama ipuçlarını denedi ve bu RSpec testlerini çalıştırırken bir fark yaratmadı. Ben de ruby ​​sürümü/platform bilgisi de dahil olmak üzere benim soru güncellendi. belki de rspec'e yükseltme yapmam gerekiyor 2.x –

37

Kodunuzu çalıştırırsam özel karakterde bir hata alıyorum. Bu kodu deneyebilir misin?

benim pencere kutusunda
# encoding: UTF-8 
File.open("test.txt", "w:UTF-8") do |f| 
    f.write "test \u00A9 foo" 
end 

#Encoding.filesystem = "UTF-8" 
p Encoding.find("filesystem") 
File.open("test.txt", "r:UTF-8") do |f| 
    puts f.read 
end 

i sonra .. Â orada neden

#<Encoding:Windows-1252> 
test © foo 

hiçbir fikrim yok olsun

+3

Ruby'de hangi konsolda çalışıyorsunuz? Windows komut isteminde, UTF-8'i anlamadı, bu nedenle UTF-8 çıktınız bir Windows CP-1252 uygulaması tarafından görüntüleniyor. –

+1

Not: “text = File.open (dosya adı, 'r: UTF-8', &: read)' – Phrogz

+0

ile UTF-8'i daha çok okuyabilirsiniz. Tokhi'nin dikkatimi çekmesi için teşekkürler. Phrogz – peter

34

az kodla dosyayı okuyun:

# encoding: UTF-8 
file_content = File.open("test.txt", "r:UTF-8", &:read) 
+0

nice tokhi, terse ve okunabilir, mükemmel eşleme – peter