设为首页收藏本站

Crossin的编程教室

 找回密码
 立即加入
查看: 12901|回复: 9
打印 上一主题 下一主题

求救!查天气的编码问题

[复制链接]

2

主题

0

好友

28

积分

新手上路

Rank: 1

跳转到指定楼层
楼主
发表于 2017-12-4 16:59:54 |只看该作者 |倒序浏览
import urllib.request
areacode={}
f=open('areacode.py','a+')
f.write('areacode={')
url = ('http://m.weather.com.cn/data3/city.xml')
content = urllib.request.urlopen(url).read()
content=content.decode('utf-8')
provinces=content.split(',')
url1 = 'http://m.weather.com.cn/data3/city%s.xml'
for p in provinces[:3]:
    p_code=p.split('|')[0]
    url2=url1 % p_code
    content = urllib.request.urlopen(url2).read()
    content = content.decode('utf-8')
    city=content.split(',')
    for c in city:
        c_code = c.split('|')[0]
        url3 = url1 % c_code
        content = urllib.request.urlopen(url3).read()
        content = content.decode('utf-8')
        area=content.split(',')
        for a in area:
            date = a.split('|')
            code=date[0]
            name=date[1]
            areacode[name] = code
            print(name)
            f.write('%s:%s,\n'%(name,code))
f.write('}')
f.close()

以上是获取地区编号的代码,用的windows系统,加了编码转换,打印出来是汉子,运行没报错,但是储存结果的areacode.py全是乱码
而且之前的查天气部分也不能识别
areacode 查天气

回复

使用道具 举报

6

主题

2

好友

654

积分

实习版主

Rank: 7Rank: 7Rank: 7

沙发
发表于 2017-12-4 21:14:50 |只看该作者
虽然我不懂原因,但好像帮你找到解决方案了:
12.4.1.PNG

点这个Reload in another encoding,在跳出的选项中选择GBK。

12.4.2.PNG

确定用GBK进行Reload,之后乱码应该就转成中文了。
关于这个GBK和utf-8的设定,在左上角File--Settings--左侧Editor--File Encodings 有三处可以改,貌似中间这个直接决定文件的内容形式的,你可以试一试。背后的原因我目前不太懂,还得看下别的资料才行~
12.4.3.PNG
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

板凳
发表于 2017-12-5 20:24:50 |只看该作者
可以全部设成utf8,总之要保持一致。
pycharm设置参考这篇 https://zhuanlan.zhihu.com/p/26066151
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

2

主题

0

好友

28

积分

新手上路

Rank: 1

地板
发表于 2017-12-6 11:53:41 |只看该作者
TED 发表于 2017-12-4 21:14
虽然我不懂原因,但好像帮你找到解决方案了:

感谢,我把输出的这个储存结果文件上面加了行# -*- coding: GBK -*-
把调用它的天气程序上面也加了这行编码声明,调用就正常执行了
不过还是不懂为什么解码后正常运算出的结果,输出就成了GBK编码的文件了。。。。还是得补补基础书
回复

使用道具 举报

2

主题

0

好友

28

积分

新手上路

Rank: 1

5#
发表于 2017-12-6 11:54:50 |只看该作者
crossin先生 发表于 2017-12-5 20:24
可以全部设成utf8,总之要保持一致。
pycharm设置参考这篇 https://zhuanlan.zhihu.com/p/26066151 ...

好的,感谢,我试试看
回复

使用道具 举报

2

主题

0

好友

28

积分

新手上路

Rank: 1

6#
发表于 2017-12-6 12:11:35 |只看该作者
。。。。没搞懂啊,就算全都设置成utf8,输出的结果依然是gbk格式的
回复

使用道具 举报

6

主题

2

好友

654

积分

实习版主

Rank: 7Rank: 7Rank: 7

7#
发表于 2017-12-6 14:35:45 |只看该作者
crossin先生 发表于 2017-12-5 20:24
可以全部设成utf8,总之要保持一致。
pycharm设置参考这篇 https://zhuanlan.zhihu.com/p/26066151 ...

我俩的程序抓到的city.py 好像就是GBK编码格式的,这是什么原因啊?是由url内容格式决定的么?

PyCharm全调成utf-8,但是city.py好像因为GBK编码的原因在utf-8下乱码:

12.6.1.PNG

在写文件时,开头加一句编码格式的语句,此外只能手动设置编码格式为GBK才行
12.6.2.PNG 12.6.3.PNG





回复

使用道具 举报

6

主题

2

好友

654

积分

实习版主

Rank: 7Rank: 7Rank: 7

8#
发表于 2017-12-6 14:46:54 |只看该作者
crossin先生 发表于 2017-12-5 20:24
可以全部设成utf8,总之要保持一致。
pycharm设置参考这篇 https://zhuanlan.zhihu.com/p/26066151 ...

先生,还有个疑问
1. # -*- coding:utf-8 -*- 这句中间的空格也是必需的么?刚我没注意把空格全去掉,写入city.py,导致新文件的编码格式并没有改变,加上空格就好了

2. #coding:utf-8 这句和 # -*- coding:utf-8 -*- 是通用的么?(为啥后面这句搞这么复杂。。)
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

9#
发表于 2017-12-6 14:48:58 |只看该作者
TED 发表于 2017-12-6 14:46
先生,还有个疑问
1. # -*- coding:utf-8 -*- 这句中间的空格也是必需的么?刚我没注意把空格全去掉,写 ...

应该是通用的,不影响
空格的问题我没有验证过
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

6

主题

2

好友

654

积分

实习版主

Rank: 7Rank: 7Rank: 7

10#
发表于 2017-12-6 15:11:15 |只看该作者
本帖最后由 TED 于 2017-12-6 15:12 编辑
crossin先生 发表于 2017-12-6 14:48
应该是通用的,不影响
空格的问题我没有验证过

我让程序写入city.py时也把内容print出来

print内容一直时正常的:
12.6.05.PNG

在前面加#-*-coding:utf-8-*-时,只要utf-8和之后的-*-中间有空格,写入的文件就正常;utf-8-*-这样连起来的话就有问题,但是在print时都是没问题的:
12.6.07.PNG 12.6.04.PNG 12.6.03.PNG
回复

使用道具 举报

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

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

GMT+8, 2024-11-1 10:28 , Processed in 0.028803 second(s), 28 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部