如果你只使用ASCII字符,則可以使用
>> "Hello \xBF World!".encode('utf-8', 'binary', :invalid => :replace, :undef => :replace)
=> "Hello � World!"
但是如果我們用同樣的方法與有效的UTF8字符是ASCII
>> "¡Hace \xBF mucho frío!".encode('utf-8', 'binary', :invalid => :replace, :undef => :replace)
=> "��Hace � mucho fr��o!"
嗯哦無效會發生什麼!我們希望frío保持口音。下面是保持有效的UTF8字符
>> "¡Hace \xBF mucho frío!".chars.select{|i| i.valid_encoding?}.join
=> "¡Hace mucho frío!"
而且在Ruby中2.1有一個叫scrub
新的方法來解決這個問題
>> "¡Hace \xBF mucho frío!".scrub
=> "¡Hace � mucho frío!"
>> "¡Hace \xBF mucho frío!".scrub('')
=> "¡Hace mucho frío!"
謝謝你的選擇!使用'ascii'作爲編碼也起作用。 – drewinglis
@drewinglis:我喜歡「binary」的明確性(這是「ascii-8bit」的別名),「ascii」並不完全相同。 –