用户上传的文本文件,请问该如何获取这个文件的 encoding?以便正确的解析这个文件。
文件编码检测几乎没有 100% 好使的方法。有很特殊的编码就只能用很特殊的方法。我曾经遇到过一个很棘手的问题,靠开源的项目 ude 把问题搞定了:http://www.tylerlong.me/1317193941/. 不过是C#的代码. 原始项目是 Mozilla 写的 C++ 项目。你可以看下有没有相应的 Ruby 移植版本。
rchardet19 or charlock_holmes
rchardet19
charlock_holmes
https://github.com/batterseapower/libcharsetdetect
之前玩 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-8和gbk/gb2312两种类型的文件,能解决 95%的问题,其余的就通知用户自己转换好编码再上传。
utf-8
gbk/gb2312