youwater 2007-7-31 09:34
如何判断一文本字串的编码类型?
如何判断一文本字串的编码类型?
youwater 2007-7-31 10:47
是的,比如我从baidu和google分别取了一段文本,我如何知道它们分别是gb2312还是utf-8或者是其他编码?
brianwang 2007-7-31 17:52
require 'charguess'
CharGuess::guess("\xA4\xCF") # => "EUC-JP"
[url]https://sourceforge.net/projects/libcharguess/[/url]
下载安装 charguess
$ ruby extconf.rb --with-charguess-include=/location/of/charguess.h
$ make
$ make install
admin 2007-7-31 17:53
[quote]原帖由 [i]youwater[/i] 于 2007-7-31 10:47 发表 [url=http://ruby-lang.org.cn/forums/redirect.php?goto=findpost&pid=2075&ptid=601][img]http://ruby-lang.org.cn/forums/images/common/back.gif[/img][/url]
是的,比如我从baidu和google分别取了一段文本,我如何知道它们分别是gb2312还是utf-8或者是其他编码? [/quote]
我想你如果从网页上取的话,可以从HttpHeader里知道这网页里的字符的编码的。
youwater 2007-8-1 08:49
skyover,httpheader并不可靠的,因为有些网站的写法是非标准的。
我试试brianwang的方法看,谢谢。
youwater 2007-8-1 09:35
麻烦brianwang,ruby extconf.rb 中的extconf.rb是哪里来的?
我上网找了一下,看起来是一个ruby扩展的配置文件,那么它应该如何写呢?
我仿着写了个
[code]
# Loads mkmf which is used to make makefiles for Ruby extensions
require 'mkmf'
# Give it a name
extension_name = 'charguess'
# The destination
dir_config(extension_name)
# Do the work
create_makefile(extension_name)
[/code]
然后执行:ruby extconf.rb --with-charguess-include=cpp/charguess.h
提示:creating Makefile
执行:make
提示:make: Nothing to be done for `all'.
安装失败。
[[i] 本帖最后由 youwater 于 2007-8-1 09:44 编辑 [/i]]
youwater 2007-8-1 11:38
完美解决
分别到 [url]http://libcharguess.sourceforge.net[/url] 和 [url]http://raa.ruby-lang.org/project/charguess[/url] 下载相应的软件包,前者是c++写的文本编码检测库,后者是ruby的绑定软件包。
分别解压到libcharguess和ruby-libcharguess;
进入libcharguess,执行:
[code]
./configure
make
sudo make install
[/code]
进入ruby-libcharguess,执行:
[code]
ruby extconf.rb --with-charguess-include=../libcharguess/cpp/
make
sudo make install
[/code]
[code]
irb(main):001:0> require 'charguess'
=> true
irb(main):003:0> CharGuess::guess "中国"
=> "UTF-8"
[/code]
[[i] 本帖最后由 youwater 于 2007-8-1 11:55 编辑 [/i]]
itachi007 2007-10-15 22:51
不好用呀
各位,你们是不是在linux上做的呀。
我在windows下怎么都弄不出来呀。
拜托,以后发帖的时候把环境说明白,好不好。
sishen 2007-10-16 19:33
[quote]原帖由 [i]youwater[/i] 于 2007-8-1 11:38 发表 [url=http://ruby-lang.org.cn/forums/redirect.php?goto=findpost&pid=2202&ptid=601][img]http://ruby-lang.org.cn/forums/images/common/back.gif[/img][/url]
分别到 [url]http://libcharguess.sourceforge.net[/url] 和 [url]http://raa.ruby-lang.org/project/charguess[/url] 下载相应的软件包,前者是c++写的文本编码检测库,后者是ruby的绑定软件包。
分别解压到libcharguess和ruby-li ... [/quote]
抵制一切要编译的.. -.- 典型的debian风格..
言规正传, 还有个库是rchardet,是python-chardet的port. 而python-chardet, 是mozilla browser的encoding auto-detection实现的port.
关于细节, 可以看这里: [url]http://nextlib.lifegoo.com/user/sishen/article/2605[/url] : A composite approach to language/encoding detection
我描了一下charguess,应该也是用其中的一个方法.
安装很简单.
$gem install rchardet
使用也很简单.
$irb -rubygems
irb(main):001:0> require 'rchardet'
=> true
irb(main):002:0> CharDet.detect("\xA4\xCF")
=> {"encoding"=>"EUC-JP", "confidence"=>0.99}
irb(main):003:0> CharDet.detect("中国")
=> {"encoding"=>"utf-8", "confidence"=>0.7525}
针对网页, 发起http request得到rawdata, 然后用rchardet去detect即可.
sevk 2008-10-6 18:33
太复杂了,希望能有现成的库或GUESS.RB文件.
:)