ruby-on-rails - Ruby 和编码转换

标签 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 语法,通常当字符串被奇怪地编码时,一些奇怪的字符会出现,例如 � 或一些中文。

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

最佳答案

编码大概是"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"

关于ruby-on-rails - Ruby 和编码转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8420857/

相关文章:

ruby-on-rails - 多个:many through relationship如何使用create方法

ruby-on-rails - Rails 计费插件

javascript - 为什么我的部分 Rails 渲染不正确?

c++ - 如何将字符串转换为 LPTSTR

c++ - 字符串堆损坏

java - 创建 1MB 字符串的好方法是什么?

ruby-on-rails - rails : render a template into a variable

ruby-on-rails - Ruby on Rails 开发流程/顺序

ruby - 我如何在 Bluemix 中升级 Rubygems?

ruby - 如何在 Ruby 中对数字数组求和?