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)
如果我应该提供更多信息或详细说明某些事情,请告诉我.
编码可能是"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)