Gem 大家平时在用什么 chardet gem?

Saito · 2011年12月02日 · 最后由 leonyuan 回复于 2013年04月23日 · 4021 次阅读

最好是 pure ruby 的。

最近在用 rchardet19, '几乎'能满足需求。

但是最近碰到一篇俄文,识别错误了..

1.9.3p0 :009 > diff.diff
 => "--- a/mtg_novels.html\n+++ b/mtg_novels.html\n@@ -19,7 +19,7 @@\n <TR>\n <!-- \xCC\xE5\xED\xFE -->\n <TD BGCOLOR=#000000 WIDTH=140 VALIGN=\"TOP\">\n-<?php include 'menu.inc'; ?>\n+<?php include= 'menu.inc'; ?>\n </TD>\n <noindex>\n <!-- \xCE\xF1\xED\xEE\xE2\xED\xEE\xE9 \xF2\xE5\xEA\xF1\xF2 -->" 
1.9.3p0 :010 > CharDet.detect(diff.diff)
 => #<struct encoding="MacCyrillic", confidence=0.9034937924254334> 

这里应该 detect 到 Cyrillic 或者 windows-1251 的..

MacCyrillic 跟 Cyrillic 的区别是啥.. 现在看来效果就是 俄文的第一个字符会坏掉..

detect 这种事,果然是字符越多越容易正确的。

我觉得还可以猜。。 try retry 直到猜对........

#1 楼 @hooopo 问题是,你不知道什么是对的.. 只有显示出来了别人看到才知道对不对..

话说要不是别人说这个字符不对。俄文我真看不出来第一个字符不对。

你的需求挺 BT 的。

刚好搜到你的文章。我只要识别 CJK 的就可以了。

#4 楼 @hlxwell charlock_holmes 比较好。

不过有个问题就是,在 ruby 里能够处理的字符串都得是 utf-8 编码的。就是说 File.read("file_path", :encoding => "这个必须设对") 否则根本就读不出来。但是你不知道这个 encoding 你怎么去读出来判断。矛盾了。

@hlxwell 用 File.binread 就可以读出原样的来检测

#6 楼 @hlxwell 不对,Ruby 对多字节字符的处理和 Perl、Python 不同

恩。可以读出来。是 Rails 正则处理,以 utf-8 编码去处理。所以你用 File.read("xx", :encoding ..) 就帮你转成 utf-8 了。所以就可以交给 Rails 去做处理了。

@Saito 是的,宙斯哥推荐给我了 charlock_holmes,用了,行了,好使,谢了。

在我心中,宙哥就是 字符达人,吕字达,吕正达,吕 C 达。 忘记 @night_song 晚歌了

rchardet19 很好用。找了好久。

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