检测编码

Phi*_*lak 10 ruby ruby-1.9

我从网上得到一些字符串数据,我怀疑它并不总是它所说的.我不知道问题出在哪里,我只是不在乎了.从这个项目的第一天起,我一直在与Ruby字符串编码进行斗争.我真的想要某种方式来说:"这是一个字符串.它是什么?"然后使用这些数据将其转换为UTF-8,这样它就不会gsub()在我的应用程序深处爆炸2,000行.我已经检查过了rchardet,但即使它现在可以用于1.9,它只是在任何具有多个字节的输入时爆炸......这没有用.

gam*_*ure 9

你无法真正检测到编码.你只能假设它.

对于大多数西方语言应用程序,以下构造将起作用.传统的编码通常是"ISO-8859-1".新的和首选的编码是UTF-8.为什么不简单地尝试使用UTF-8对其进行编码并使用旧编码进行回退

def detect_encoding( str )
  begin
    str.encode("UTF-8")
    "UTF-8"
  rescue
    "ISO-8859-1"
  end
end
Run Code Online (Sandbox Code Playgroud)


Jör*_*tag 8

从字符串中分辨它是什么编码是不可能的.你总是需要一些额外的元数据来告诉你字符串的编码是什么.

如果从Web获取字符串,则该元数据位于HTTP标头中.如果HTTP标头错误,那么您或Ruby或其他任何人都无法做到.您需要向网站管理员提交错误信息,并等待他修复它.如果您与网站签订了服务级别协议,请提交错误,等待一周,然后起诉他们.

  • 不可能确切地知道,但你可以做出有根据的猜测.这就是rchardet所做的.但是,我无法使用Ruby 1.9. (6认同)