2015-04-26 43 views
7

Ben Ruby komut dosyasını çalıştırmak için çalışıyor ve her zaman bu hat üzerinde bir hata alıyorum: Ben tarafından "dr" yerine çalışıyorumgeçersiz bayt dizisi

file_content.gsub(/dr/i,'med') 

"med".

hatadır:

program.rb:4:in `gsub': invalid byte sequence in UTF-8 (ArgumentError) 

Neden bu sorunu nasıl düzeltebilirim, yani?

Bir MAC OS X Yosemite makinesinde Ruby 2.2.1p85 ile çalışıyorum.

+0

- doğru mu? Dosya nereden geliyor ve nasıl okuyorsunuz? Dosyanın gerçek kodlamasını biliyor musunuz? – matt

cevap

12

Muhtemelen dize böylece "Ruby 2.0.0 String#Match ArgumentError: invalid byte sequence in UTF-8" Bkz

if ! file_content.valid_encoding? 
    s = file_content.encode("UTF-16be", :invalid=>:replace, :replace=>"?").encode('UTF-8') 
    s.gsub(/dr/i,'med') 
end 

kullanmak UTF-8 biçiminde değil. Eğer bir dosyadan veri okuma gibi görünüyor değişken adı itibaren

+0

Cevabınız için teşekkür ederiz. Sağladığınız kod snippet'ini nasıl kullanabilirim? Programımı hemen kullanmaya başladığımdan beri: undefined local variable veya main için method 's ': Object (NameError). Teşekkür – Simplicity

+0

kullanım 'file_content' yerine 'Sorumun göstermek hat Önce –

+0

ettirsin, ben aşağıdaki kod satırını vardır: "file_content = IO.read (dosya adı)". Ben – Simplicity

İlgili konular