Crossin的编程教室

标题: crossin先生能不能讲一讲python的编码问题呢? [打印本页]

作者: jasonwu    时间: 2013-12-3 16:49
标题: crossin先生能不能讲一讲python的编码问题呢?
最近被python的乱码问题搞的头疼,还是没弄明白,很希望老师分享下这方面的经验。

作者: zwm512327    时间: 2013-12-7 22:37
同感
作者: crossin先生    时间: 2013-12-11 14:21
这个真不是三言两语能讲清楚的……
不同系统不同软件都会导致编码不同

首要问题是,你要知道目前状态下是什么编码,这个可以用chardet模块来做
作者: lynnpierre    时间: 2014-8-19 17:03
本帖最后由 lynnpierre 于 2014-8-19 17:05 编辑
crossin先生 发表于 2013-12-11 14:21
这个真不是三言两语能讲清楚的……
不同系统不同软件都会导致编码不同

我今天快被这编码折磨死了,我个CROSSIN课程里面编了下代码,在天气的那个程序里面死活读不到这个生成的city.py里面的城市,但用crossin先生上传的city.py就可以读到,请问这是因为什么问题呢?
-----------------------------下面是代码---------------------------------
# -*- coding: utf-8 -*-
# -*- coding: cp936 -*-
import urllib2
url1 = 'http://m.weather.com.cn/data5/city.xml'
content1 = urllib2.urlopen(url1).read()#获取省级数据
provinces = content1.split(',')#list化
f = open('city.py','w')#初始化city.txt
f.writelines('city = {')#写入city字典

for p in provinces:#遍历省级数据
        p1 = p.split('|')#list化
        url2 = 'http://m.weather.com.cn/data5/city%s.xml'%p1[0]#选定省级代码的城市页面
        content2 = urllib2.urlopen(url2).read()#获取相应省的市级数据
        city = content2.split(',')#list化
        for c in city:
                c1 = c.split('|')#list化
                url3 = 'http://m.weather.com.cn/data5/city%s.xml'%c1[0]
                content3 = urllib2.urlopen(url3).read()#获取相应市的区级数据
                area = content3.split(',')#list化
                for a in area:
                        a1 = a.split('|')#list化
                        f.write("    '"+a1[1]+"'"+": '101"+str(a1[0])+"', ")
f.writelines('}')
f.close()

print 'city字典加载完成'

作者: crossin先生    时间: 2014-8-19 17:24
lynnpierre 发表于 2014-8-19 17:03
我今天快被这编码折磨死了,我个CROSSIN课程里面编了下代码,在天气的那个程序里面死活读不到这个生成的ci ...

你生成完这个文件,可以手动去给他前面加上#coding: xxx来指定它的编码
这个编码要和你后面程序输入源的编码一致
如果是windows的话,就是cp936
作者: lynnpierre    时间: 2014-8-19 17:33
crossin先生 发表于 2014-8-19 17:24
你生成完这个文件,可以手动去给他前面加上#coding: xxx来指定它的编码
这个编码要和你后面程序输入源的 ...

在city.py里面加上#coding: utf-8,又提示ImportError: cannot import name city调用出错
生成的文件内容:
# -*- coding: utf-8 -*- city = {    '北京': '101010101',......}
city = {    '北京': '101010101',......}这样又找不到城市
作者: crossin先生    时间: 2014-8-19 17:42
lynnpierre 发表于 2014-8-19 17:33
在city.py里面加上#coding: utf-8,又提示ImportError: cannot import name city调用出错
生成的文件内容 ...

你没换行?
作者: Phoestia    时间: 2016-8-18 13:12
lynnpierre 发表于 2014-8-19 17:03
我今天快被这编码折磨死了,我个CROSSIN课程里面编了下代码,在天气的那个程序里面死活读不到这个生成的ci ...

# -*- coding: utf-8 -*-
# -*- coding: cp936 -*-

两个可以同时写吗?
作者: crossin先生    时间: 2016-8-19 11:09
Phoestia 发表于 2016-8-18 13:12
# -*- coding: utf-8 -*-
# -*- coding: cp936 -*-

不可以,一个文件最多一种编码,你写两个应该也只有第一行有效
作者: Phoestia    时间: 2016-8-19 11:32
crossin先生 发表于 2016-8-19 11:09
不可以,一个文件最多一种编码,你写两个应该也只有第一行有效

明白了 谢谢!
作者: 灰机    时间: 2016-8-20 17:10
crossin先生 发表于 2016-8-19 11:09
不可以,一个文件最多一种编码,你写两个应该也只有第一行有效

我声明utf-8就部分中文乱码,但是声明gbk就完全没有乱码了,也不知道是为什么。。。
作者: crossin先生    时间: 2016-8-20 17:36
灰机 发表于 2016-8-20 17:10
我声明utf-8就部分中文乱码,但是声明gbk就完全没有乱码了,也不知道是为什么。。。 ...

windows默认是gbk编码




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