社区应用 最新帖子 精华区 社区服务 会员列表 统计排行 银行
  • 7894阅读
  • 10回复
youwater 离线

级别: 新手上路


显示用户信息 

倒序阅读   只看楼主      楼主   发表于: 2007-07-31
更多操作

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

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

级别: 管理员


显示用户信息 

只看该作者      沙发   发表于: 2007-07-31
编码类型?指utf-8,gb2312?
谢谢大家加入Ruby中文社区!
youwater 离线

级别: 新手上路


显示用户信息 

只看该作者      板凳   发表于: 2007-07-31
是的,比如我从baidu和google分别取了一段文本,我如何知道它们分别是gb2312还是utf-8或者是编码?
brianwang 离线

级别: 新手上路


显示用户信息 

只看该作者      地板   发表于: 2007-07-31
require 'charguess'
CharGuess::guess("\xA4\xCF") # => "EUC-JP"

https://sourceforge.net/projects/libcharguess/

下载安装 charguess
$ ruby extconf.rb --with-charguess-include=/location/of/charguess.h
$ make
$ make install
Brian Wang

Next is Ruby
skyover 离线

级别: 管理员


显示用户信息 

只看该作者      4楼  发表于: 2007-07-31
引用
原帖由 youwater 于 2007-7-31 10:47 发表
是的,比如我从baidu和google分别取了一段文本,我如何知道它们分别是gb2312还是utf-8或者是编码?


我想你如果从网页上取的话,可以从HttpHeader里知道这网页里的字符的编码的。
谢谢大家加入Ruby中文社区!
youwater 离线

级别: 新手上路


显示用户信息 

只看该作者      5楼  发表于: 2007-08-01
skyover,httpheader并不可靠的,因为有些网站的写法是非标准的。

我试试brianwang的方法看,谢谢。
youwater 离线

级别: 新手上路


显示用户信息 

只看该作者      6楼  发表于: 2007-08-01
麻烦brianwang,ruby extconf.rb 中的extconf.rb是哪里来的?

我上网找了一下,看起来是一个ruby扩展的配置文件,那么它应该如何写呢?

我仿着写了个

# 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)


然后执行:ruby extconf.rb --with-charguess-include=cpp/charguess.h
提示:creating Makefile

执行:make
提示:make: Nothing to be done for `all'.

安装失败。

[ 本帖最后由 youwater 于 2007-8-1 09:44 编辑 ]
youwater 离线

级别: 新手上路


显示用户信息 

只看该作者      7楼  发表于: 2007-08-01
完美解决
分别到 http://libcharguess.sourceforge.nethttp://raa.ruby-lang.org/project/charguess 下载相应的软件包,前者是c++写的文本编码检测库,后者是ruby的绑定软件包。

分别解压到libcharguess和ruby-libcharguess;

进入libcharguess,执行:

./configure
make
sudo make install


进入ruby-libcharguess,执行:

ruby extconf.rb --with-charguess-include=../libcharguess/cpp/
make
sudo make install



irb(main):001:0> require 'charguess'
=> true
irb(main):003:0> CharGuess::guess \"中国\"
=> \"UTF-8\"


[ 本帖最后由 youwater 于 2007-8-1 11:55 编辑 ]
itachi007 离线

级别: 新手上路

显示用户信息 

只看该作者      8楼  发表于: 2007-10-15
不好用呀
各位,你们是不是在linux上做的呀。
我在windows下怎么都弄不出来呀。
拜托,以后发帖的时候把环境说明白,好不好。
@--后知后觉--@
sishen 离线

级别: 新手上路

显示用户信息 

只看该作者      9楼  发表于: 2007-10-16
引用
原帖由 youwater 于 2007-8-1 11:38 发表
分别到 http://libcharguess.sourceforge.nethttp://raa.ruby-lang.org/project/charguess 下载相应的软件包,前者是c++写的文本编码检测库,后者是ruby的绑定软件包。

分别解压到libcharguess和ruby-li ...



一切要编译的.. -.- 典型的debian风格..

言规正传, 还有个库是rchardet,是python-chardet的port. 而python-chardet, 是mozilla browser的encoding auto-detection实现的port.
关于细节, 可以看这里: http://nextlib.lifegoo.com/user/sishen/article/2605 : 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即可.
描述
快速回复

如果您在写长篇帖子又不马上发表,建议存为草稿
认证码:

 回复后跳转到最后一页