Ruby和编码转换

san*_*rom 3 ruby string encoding ruby-on-rails

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

Stefan,Engstr\232m
Run Code Online (Sandbox Code Playgroud)

UniversalDetector(chardet gem)将编码标识为iso-8859-2.

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

尝试转换字符串会产生以下结果:

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

而我希望:

 => "Stefan,Engström"
Run Code Online (Sandbox Code Playgroud)
  • 字符串真的可以用于其他编码吗?
  • 我之前没有见过\ 232语法,通常当字符串奇怪编码时,会出现一些奇怪的字符,例如 或一些中文.

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

mu *_*ort 5

编码可能是"Macintosh Roman",其他几个选项可能是"Mac Central European""Mac Icelandic".该\nnn符号使用八进制所以\232是十进制154和154字符是,你在所有这三个编码的预期较低的情况下O型变音符("O"); 我在任何Windows代码页或ISO 8859字符集中都没有看到154.我猜Mac Roman比冰岛或中欧编码更常见.

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

>> Iconv.conv("UTF-8", "MacRoman", "Stefan,Engstr\232m")
=> "Stefan,Engström"
Run Code Online (Sandbox Code Playgroud)