Crossin的编程教室

标题: 求救!查天气的编码问题 [打印本页]

作者: littlewhite    时间: 2017-12-4 16:59
标题: 求救!查天气的编码问题
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 查天气


作者: TED    时间: 2017-12-4 21:14
虽然我不懂原因,但好像帮你找到解决方案了:
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

作者: crossin先生    时间: 2017-12-5 20:24
可以全部设成utf8,总之要保持一致。
pycharm设置参考这篇 https://zhuanlan.zhihu.com/p/26066151
作者: littlewhite    时间: 2017-12-6 11:53
TED 发表于 2017-12-4 21:14
虽然我不懂原因,但好像帮你找到解决方案了:

感谢,我把输出的这个储存结果文件上面加了行# -*- coding: GBK -*-
把调用它的天气程序上面也加了这行编码声明,调用就正常执行了
不过还是不懂为什么解码后正常运算出的结果,输出就成了GBK编码的文件了。。。。还是得补补基础书
作者: littlewhite    时间: 2017-12-6 11:54
crossin先生 发表于 2017-12-5 20:24
可以全部设成utf8,总之要保持一致。
pycharm设置参考这篇 https://zhuanlan.zhihu.com/p/26066151 ...

好的,感谢,我试试看
作者: littlewhite    时间: 2017-12-6 12:11
。。。。没搞懂啊,就算全都设置成utf8,输出的结果依然是gbk格式的
作者: TED    时间: 2017-12-6 14:35
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






作者: TED    时间: 2017-12-6 14:46
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 -*- 是通用的么?(为啥后面这句搞这么复杂。。)
作者: crossin先生    时间: 2017-12-6 14:48
TED 发表于 2017-12-6 14:46
先生,还有个疑问
1. # -*- coding:utf-8 -*- 这句中间的空格也是必需的么?刚我没注意把空格全去掉,写 ...

应该是通用的,不影响
空格的问题我没有验证过
作者: TED    时间: 2017-12-6 15:11
本帖最后由 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





欢迎光临 Crossin的编程教室 (https://bbs.crossincode.com/) Powered by Discuz! X2.5