Ruby和编码转换

时间:2011-12-07 18:54:44

标签: ruby-on-rails ruby string encoding

我正在将CSV文件导入Ruby(1.8.7)。 File.open('path / to / file.csv')。read在控制台中返回:

Stefan,Engstr\232m

UniversalDetector(chardet gem)将编码识别为iso-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语法,通常当字符串奇怪编码时,会出现一些奇怪的字符,例如: 或一些中国人。

如果我应该提供更多信息或详细说明某事,请告诉我。

1 个答案:

答案 0 :(得分:5)

编码可能是"Macintosh Roman",其他几个选项可能是"Mac Central European""Mac Icelandic"\nnn表示法使用八进制,因此\232的小数为154,而字符154是小写的O-umlaut(“ö”),你在所有这三种编码中都是期望的;我在任何Windows代码页或ISO 8859字符集中都没有看到154。我猜Mac Roman比冰岛或中欧编码更常见。

尝试使用'MacRoman'作为Iconv的源编码:

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