Ответ 1
Ваша строка, кажется, была закодирована неправильно:
"Développement".encode("iso-8859-1").force_encoding("utf-8")
#=> "Développement"
Я пишу сканер, который использует Hpricot. Он загружает список строк с некоторой веб-страницы, затем я пытаюсь записать ее в файл. Что-то не так с кодировкой:
"\xC3" from ASCII-8BIT to UTF-8
У меня есть элементы, которые отображаются на веб-странице и печатаются следующим образом:
Développement
str.encoding
возвращает UTF-8
, поэтому force_encoding('UTF-8')
не помогает. Как я могу преобразовать это в читаемый UTF-8?
Ваша строка, кажется, была закодирована неправильно:
"Développement".encode("iso-8859-1").force_encoding("utf-8")
#=> "Développement"
Кажется, ваша строка думает, что это UTF-8, но на самом деле это нечто другое, возможно, ISO-8859-1.
Сначала определите (принудительно) правильное кодирование, а затем преобразуйте его в UTF-8.
В вашем примере:
puts "Développement".encode('iso-8859-1').encode('utf-8')
Альтернативой является
puts "\xC3".force_encoding('iso-8859-1').encode('utf-8') #-> Ã
Если Ã
не имеет смысла, попробуйте еще одну кодировку.
"ruby 1.9: неверная последовательность байтов в UTF-8" описал другой хороший подход с меньшим количеством кода:
file_contents.encode!('UTF-16', 'UTF-8')