设为首页收藏本站

Crossin的编程教室

 找回密码
 立即加入
楼主: crossin先生
打印 上一主题 下一主题

【Python 第44课】 查天气(2)

  [复制链接]

0

主题

0

好友

10

积分

新手上路

Rank: 1

121#
发表于 2016-4-10 00:03:48 |只看该作者
Crossin老师,感谢您的课程
查天气第二节里面,中文字符总是有问题。windows 7环境
1、代码中提示的汉字在cmd中是乱码
2、根据城市查询天气时,汉字城市死活出不来,搞半天别人教我用BJ试了下,居然是可以的。

该如何解决?
站内帖子搜索找不着相关内容。。
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

122#
发表于 2016-4-10 16:20:23 |只看该作者
i7i1234567 发表于 2016-4-10 00:03
Crossin老师,感谢您的课程
查天气第二节里面,中文字符总是有问题。windows 7环境
1、代码中提示的汉字在c ...

BJ是啥?查天气这几课的回帖里有说到类似的情况。一般是没有把编码设成cp936。
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

0

主题

0

好友

10

积分

新手上路

Rank: 1

123#
发表于 2016-4-15 18:28:56 |只看该作者
crossin先生 发表于 2016-4-10 16:20
BJ是啥?查天气这几课的回帖里有说到类似的情况。一般是没有把编码设成cp936。 ...

中文城市查询出不来,我修改了一个北京为BJ,查询BJ可以出来
回复

使用道具 举报

1

主题

0

好友

47

积分

新手上路

Rank: 1

124#
发表于 2016-4-15 22:32:26 |只看该作者
crossin先生 发表于 2013-7-24 10:27
很好啊
python 3 的同学看过来!

大哥 你不知道我这两天吃了多少苦  在没来这个看。
我从python3 运行不行  下了一个python2.7  运行还是不是   没有把#coding:utf-8改为#改为#coding:cp936
最后我到pycharm里面该文件编码 才对了。
哪知道今天在这里一看 我之前受的苦全白费了 ,方法都在这里。我要继续用python3 ,谢谢那位大哥把python3 urllib的用法贴出来。 寂寞自学的孩子相当不容易。
回复

使用道具 举报

1

主题

0

好友

47

积分

新手上路

Rank: 1

125#
发表于 2016-4-15 22:33:25 |只看该作者
小坏 发表于 2013-8-8 17:34
编码问题解决分享:
我用win7的,照编码写的出了问题,返回的citycode都是None。后在群里童鞋指导下,把cit ...

谢谢。
回复

使用道具 举报

0

主题

0

好友

54

积分

注册会员

Rank: 2

126#
发表于 2016-4-19 15:41:17 |只看该作者
小坏 发表于 2013-8-8 17:34
编码问题解决分享:
我用win7的,照编码写的出了问题,返回的citycode都是None。后在群里童鞋指导下,把cit ...

我也遇到了同样的问题。把字典直接放在程序中运行正常;加了utf-8以后,作为模块导入后citycode就一直输出None。所以就来论坛看下。还好看到了你的解决办法。
回复

使用道具 举报

0

主题

0

好友

8

积分

新手上路

Rank: 1

127#
发表于 2016-4-29 09:36:31 |只看该作者
本帖最后由 issaclee 于 2016-4-29 10:51 编辑

老师及各位同学好:
我卡在这一课一天多了,win7环境,python2.7,两边都已设为cp936编码格式,但是content始终打印乱码,sys的默认编码是ascii,这个应该怎么解决呢?
我看了下,主要是接口返回来的内容肯定不是cp936格式的,具体是什么格式我也不清楚,这里打印不出来
# -*- coding: cp936 -*-
import urllib2
import json

from city import city
cityname = raw_input('你想查哪个城市的天气?\n')
citycode = city.get(cityname)
print citycode
if citycode:
   url = ('http://wthrcdn.etouch.cn/weather_mini?citykey=%s' % citycode)
   print url
   content = urllib2.urlopen(url).read()
   print content
   import sys
   print(sys.getdefaultencoding())



结果:
================================
>>>
你想查哪个城市的天气?
北京
101010100
http://wthrcdn.etouch.cn/weather_mini?citykey=101010100
ヒ
ascii
>>>

















回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

128#
发表于 2016-4-29 11:02:55 |只看该作者
issaclee 发表于 2016-4-29 09:36
老师及各位同学好:
我卡在这一课一天多了,win7环境,python2.7,两边都已设为cp936编码格式,但是content ...

发现 wthrcdn.etouch.cn 这个站的返回接口用了 gzip 压缩数据。所以你那个不是编码问题,而是数据被压缩了。
用此方法解压 gzip 数据:
  1. from StringIO import StringIO
  2. import gzip
  3. buf = StringIO(content)
  4. f = gzip.GzipFile(fileobj=buf)
  5. data = f.read()
复制代码
py3写法:
  1. import gzip
  2. data = gzip.decompress(content)
复制代码
详细的可去网上搜索“python 解压 gzip”
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

0

主题

0

好友

8

积分

新手上路

Rank: 1

129#
发表于 2016-4-29 11:39:50 |只看该作者
crossin先生 发表于 2016-4-29 11:02
发现 wthrcdn.etouch.cn 这个站的返回接口用了 gzip 压缩数据。所以你那个不是编码问题,而是数据被压缩 ...

老师,我访问http://www.weather.com.cn/data/cityinfo/%s.html这个依然不行
idle打印不出JSON数据,换了cmd也打印不出
用浏览器访问也是显示乱码
不清楚这个接口返回的到底是什么格式的数据,ide的编码格式肯定和接口返回数据的格式不匹配

cmd就是cp936的输出格式了,但是仍然无法正确输出数据
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

130#
发表于 2016-4-30 23:10:10 |只看该作者
issaclee 发表于 2016-4-29 11:39
老师,我访问http://www.weather.com.cn/data/cityinfo/%s.html这个依然不行
idle打印不出JSON数据,换了 ...

你上面那个网站,只要做一次gzip解压就可以,我试过。
下面这个,我看了下,他给的返回值默认是utf-8编码,所以你要手动做下解码处理
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即加入

QQ|手机版|Archiver|Crossin的编程教室 ( 苏ICP备15063769号  

GMT+8, 2024-5-11 14:55 , Processed in 0.028182 second(s), 23 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部