查看完整版本: 如何判断一文本字串的编码类型?

youwater 2007-7-31 09:34

如何判断一文本字串的编码类型?

如何判断一文本字串的编码类型?

admin 2007-7-31 10:12

编码类型?指utf-8,gb2312?

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文件.
:)
页: [1]
查看完整版本: 如何判断一文本字串的编码类型?