Ruby 如何获取文件的编码

junlai · 2012年07月11日 · 最后由 junlai 回复于 2012年07月16日 · 4384 次阅读

用户上传的文本文件,请问该如何获取这个文件的 encoding?以便正确的解析这个文件。

匿名 #1 2012年07月11日

文件编码检测几乎没有 100% 好使的方法. 有很特殊的编码就只能用很特殊的方法. 我曾经遇到过一个很棘手的问题, 靠开源的项目 ude 把问题搞定了: http://www.tylerlong.me/1317193941/. 不过是 C#的代码. 原始项目是 Mozilla 写的 C++ 项目. 你可以看下有没有相应的 Ruby 移植版本.

rchardet19 or charlock_holmes

之前玩 1.8 的时候用过 chardet 。lz 可以参考,但是请慎重

最麻烦的是一个文件里还可能有不只一种编码,虽然这种情况比较少见

open('file', 'w+') do |f|
  text = '如何获取文件的编码'
  f.write text.encode('gbk')
  f.write text.encode('utf-8')
  f.rewind
  puts f.read
end

大家回复的方式还没有来得及尝试,以后尝试了再写上来跟大家分享。。因为时间紧,目前就只能解析utf-8gbk/gb2312两种类型的文件,能解决 95%的问题,其余的就通知用户自己转换好编码再上传。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号