求救,Python2.7编码问题,痛不欲生了!!

2013-08-15 20:38:20 +08:00
 zippera
简化一下程序,要打开类似这样的网页:

import urllib2

url = 'http://mlook.mobi/book/info/6248'
res = urllib2.urlopen(url)
print res.read()

乱码!!!

PS: win下Cygwin


请不要说BS、pyquery、lxml、Python3。。。请帮帮我解决这个问题,并解释,多谢了!
7919 次点击
所在节点    Python
28 条回复
felix021
2013-08-15 20:44:53 +08:00
print res.read().decode('utf-8').encode('cp936')
itfanr
2013-08-15 21:12:04 +08:00
@felix021 无输出。。。
timonwong
2013-08-15 21:19:49 +08:00
@itfanr
无输出,两种可能
1. read() 不能读两次
2. 这个网页包含了一些稀有字符,因此要 print res.read().decode('utf-8').encode('gb18030')
ling0322
2013-08-15 21:22:27 +08:00
1. 去看看print res.read().decode('gbk')
2. 这个response网页是不是被gzip压缩过
cute
2013-08-15 21:25:02 +08:00
import sys
import urllib2
url = 'http://mlook.mobi/book/info/6248'
res = urllib2.urlopen(url)
s = res.read()
print s.decode('utf8').encode(sys.stdout.encoding)
ccdjh
2013-08-15 21:33:45 +08:00
这个么?

import sys
default_encoding = 'utf-8'
if sys.getdefaultencoding() != default_encoding:
reload(sys)
sys.setdefaultencoding(default_encoding)
itfanr
2013-08-15 21:49:37 +08:00
@timonwong 哦 还不能read两次啊
zippera
2013-08-15 21:52:25 +08:00
@felix021 500错误。。
zippera
2013-08-15 21:58:45 +08:00
@ling0322 应该跟压缩无关吧,不处理的话中文乱码,英文是正常的。
@ccdjh 这个试过了,不行。。

其余的没法试了,python执行后卡那儿不动了。。
cj1324
2013-08-15 22:16:57 +08:00
你们都没有试用编码识别工具的习惯吗?
manoon
2013-08-15 22:26:18 +08:00
先wget掉。
然后在本地读取HTML来测试。
nulloo
2013-08-15 22:28:31 +08:00
cygwin没怎么用过,反正我尽量不用win的终端输出中文,宁可用ide或者ssh,重定向py的输出到文件,用编辑器看看编码对不,再就是检查环境变量
zippera
2013-08-15 22:35:15 +08:00
@manoon 用urllib.urlretrieve下载到本地后,读取完全正常。
@cj1324 哦?说说?
@nulloo 打嘴,我说错了,是git bash。网页是中文,没办法啊。文件里面是正常的,可能是这个终端的问题
manoon
2013-08-15 22:44:06 +08:00
@zippera 为什么要urlretrieve呢?(我只知道抓图片用这个。。)
我的意思是,你直接用

url = 'http://mlook.mobi/book/info/6248'
res = urllib2.urlopen(url)
con=res.read()
fhtml=open("con.html","w+")
print >>fhtml,s
试试看。
mengzhuo
2013-08-15 22:53:28 +08:00
python开发必须设置系统级的编码utf8啊

-------------
查询次数: 6 次,查询用时:70.36 ms
这是php?
pandada8
2013-08-15 22:57:19 +08:00
先在本地看看编码,decode时候可以加个 error=“ignore"(直觉告诉我似乎我有拼写错误……参阅官方文档)
VYSE
2013-08-15 23:03:56 +08:00
export LANG=en_US.UTF-8

中文系统上cmd里这样写肯定不是乱码:
print res.read().decode('utf-8')

那就是CYGWIN输出编码的问题,不信你可以cat一个utf-8的html文件
zippera
2013-08-15 23:05:21 +08:00
@manoon 我又傻了,用的open,写错了,不好意思。open写入后再读取是没有问题的。


@mengzhuo 用的git bash,怎么设置其默认编码呢,还有win的编码?


@pandada8 也试过。。
powerfj
2013-08-16 18:42:25 +08:00
请用linux..
zippera
2013-08-16 18:52:30 +08:00
@powerfj 对!Linux下没问题。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/79217

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX