Giả sử bạn có một chuỗi như "€foo\xA0"
, được mã hóa UTF-8, Có cách nào để xóa chuỗi byte không hợp lệ khỏi chuỗi này không? (để bạn có được "€foo"
)Có cách nào trong ruby 1.9 để xóa chuỗi byte không hợp lệ khỏi chuỗi không?
Trong ruby-1.8 bạn có thể sử dụng Iconv.iconv('UTF-8//IGNORE', 'UTF-8', "€foo\xA0")
nhưng hiện không còn được dùng nữa. "€foo\xA0".encode('UTF-8')
không làm bất cứ điều gì, vì nó đã là UTF-8. Tôi cố gắng:
"€foo\xA0".force_encoding('BINARY').encode('UTF-8', :undef => :replace, :replace => '')
trong đó sản lượng
"foo"
Nhưng điều đó cũng mất ký tự multibyte hợp lệ €
Nó không loại bỏ các '\ xF1' trong chuỗi này' "eEspa \ xF1a; FB" ' – Dorian
@Dorian, trên 1.9.3 console IRB,' "eEspa \ xF1a; FB" .chars.select {| i | i.valid_encoding?}. join' trả về '" eEspaa; FB "' ... bạn không nhận được hành vi đó hay tôi đã hiểu lầm? – acobster