2011-12-07 55 views
3

我正在將一個CSV文件導入到Ruby(1.8.7)中。 。File.open( '路徑/到/ FILE.CSV')讀返回此在控制檯:Ruby和編碼轉換

Stefan,Engstr\232m 

編碼由UniversalDetector會(chardet的寶石)鑑定爲異8859-2。

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語法,通常當字符串被奇怪地編碼時,會出現一些奇怪的字符。 或一些中國人。

讓我知道,如果我應該提供更多的信息或闡述一些事情。

+0

它看起來並不像它的'ISO-8859-2'。這將是'\ 246' http://en.wikipedia.org/wiki/ISO_8859-2 –

+2

@Kassym:在ISO 8859-2中它將是'\ 366',''\ nnn''表示法使用八進制。 –

回答

5

編碼可能是"Macintosh Roman",其他選項可能是"Mac Central European""Mac Icelandic"\nnn表示法使用八進制,因此\232爲十進制154,字符154爲小寫的O型變音符(「ö」),您期望在所有三種編碼中使用這種方式;我沒有看到任何Windows代碼頁或ISO 8859字符集中的154。我猜想Mac Roman比冰島或中歐編碼更普遍。

嘗試使用'MacRoman'作爲源編碼,語言Iconv:

>> Iconv.conv("UTF-8", "MacRoman", "Stefan,Engstr\232m") 
=> "Stefan,Engström" 
+0

非常好的趕上! –

+0

感謝!我嘗試了更大的數據集,它也運行得很好。現在我只需要弄清楚如何檢測字符集,因爲'UniversalDetector :: chardet'無法正確執行。你似乎很瞭解這個地區 - 有什麼想法? – sandstrom

+1

閱讀完一些後,區分Macroman似乎很難。 http://sackoverflow.com/questions/4198804/how-to-reliably-guess-the-encoding-between-macroman-cp1252-latin1-utf-8-and – sandstrom