Руби и преобразование кодировки - PullRequest
3 голосов
/ 07 декабря 2011

Я импортирую файл CSV в Ruby (1.8.7).File.open ('path / to / file.csv'). Read возвращает это в консоли:

Stefan,Engstr\232m

Кодировка определяется как iso-8859-2 UniversalDetector (chardet gem).

UniversalDetector::chardet("Stefan,Engstr\232m")
=> {"confidence"=>0.626936305574385, "encoding"=>"ISO-8859-2"} 

Попытка преобразования строки приводит к следующему:

Iconv.conv("UTF-8", "ISO-8859-2", "Stefan,Engstr\232m")
 => "Stefan,Engstrm"

, тогда как я ожидаю:

 => "Stefan,Engström"
  • Может ли строка действительно быть в каком-то другомкодировка?
  • Раньше я не видел синтаксиса \ 232, обычно, когда строки странно кодируются, вместо них появляется какой-то странный символ, например, � или какой-то китайский.* Дайте мне знать, если я предоставлю больше информации или уточню что-нибудь.

1 Ответ

5 голосов
/ 07 декабря 2011

Кодировка, вероятно, "Macintosh Roman" , пара других вариантов будет "Mac Central European" и "Mac Icelandic" .В обозначении \nnn используется восьмеричное значение, поэтому \232 равно 154 в десятичном виде, а символ 154 - это O-умляут в нижнем регистре ("ö"), который вы ожидаете во всех трех этих кодировках;Я не вижу 154 ни в одной из кодовых страниц Windows или наборов символов ISO 8859.Я предполагаю, что Mac Roman более распространен, чем исландская или центральноевропейская кодировки.

Попробуйте использовать 'MacRoman' в качестве исходной кодировки с Iconv:

>> Iconv.conv("UTF-8", "MacRoman", "Stefan,Engstr\232m")
=> "Stefan,Engström"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...