新手问题 http 网页内容抓取的编码问题

nameofhsw · 2015年07月22日 · 最后由 coderek 回复于 2015年07月24日 · 1675 次阅读

同一个程序,在打印网页的 body 内容的时候,中文字段用 puts 都可以显示出来,用 pp 却显示成两种编码。这是因为什么? 已其中 key words 的部分内容为例: ruby2.1.5 环境下 pp 的显示结果:\xE5\xBC\x80\xE5\x8F\x91\xE8\x80\x85 这是 ASCII-8BIT 的编码吧 ruby1.8.7 环境下 pp 的显示结果:\345\274\200\345\217\221\350\200\205 puts 都能显示成中文:“开发者”

#!/usr/bin/env ruby

require "net/http"
require "pp"
require "uri"

custom_h = {}
agent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:31.0) Gecko/20100101 Firefox/31.0"
custom_h["User-Agent"] = agent

uri  = URI("http://www.cnblogs.com")
pp uri
pp uri.host
pp uri.port
path = uri.path.empty? ? "/" : uri.path
pp path

http = Net::HTTP.new(uri.host, uri.port)
resq,data = http.get(path, custom_h)
headers = {}
resq.each {|key, val| headers[key] = val}
pp resq.body

你需要用 iconv 自己检测编码,然后转换

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