设为首页收藏本站

Crossin的编程教室

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

crossin先生能不能讲一讲python的编码问题呢?

[复制链接]

3

主题

0

好友

47

积分

新手上路

Rank: 1

跳转到指定楼层
楼主
发表于 2013-12-3 16:49:35 |只看该作者 |倒序浏览
最近被python的乱码问题搞的头疼,还是没弄明白,很希望老师分享下这方面的经验。
回复

使用道具 举报

0

主题

0

好友

10

积分

新手上路

Rank: 1

沙发
发表于 2013-12-7 22:37:08 来自手机 |只看该作者
同感
回复

使用道具 举报

174

主题

45

好友

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

板凳
发表于 2013-12-11 14:21:42 |只看该作者
这个真不是三言两语能讲清楚的……
不同系统不同软件都会导致编码不同

首要问题是,你要知道目前状态下是什么编码,这个可以用chardet模块来做
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

0

主题

0

好友

13

积分

新手上路

Rank: 1

地板
发表于 2014-8-19 17:03:01 |只看该作者
本帖最后由 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字典加载完成'
回复

使用道具 举报

174

主题

45

好友

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

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

你生成完这个文件,可以手动去给他前面加上#coding: xxx来指定它的编码
这个编码要和你后面程序输入源的编码一致
如果是windows的话,就是cp936
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

0

主题

0

好友

13

积分

新手上路

Rank: 1

6#
发表于 2014-8-19 17:33:03 |只看该作者
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',......}这样又找不到城市
回复

使用道具 举报

174

主题

45

好友

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

7#
发表于 2014-8-19 17:42:10 |只看该作者
lynnpierre 发表于 2014-8-19 17:33
在city.py里面加上#coding: utf-8,又提示ImportError: cannot import name city调用出错
生成的文件内容 ...

你没换行?
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

0

主题

1

好友

114

积分

注册会员

Rank: 2

8#
发表于 2016-8-18 13:12:53 |只看该作者
lynnpierre 发表于 2014-8-19 17:03
我今天快被这编码折磨死了,我个CROSSIN课程里面编了下代码,在天气的那个程序里面死活读不到这个生成的ci ...

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

两个可以同时写吗?
回复

使用道具 举报

174

主题

45

好友

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

9#
发表于 2016-8-19 11:09:56 |只看该作者
Phoestia 发表于 2016-8-18 13:12
# -*- coding: utf-8 -*-
# -*- coding: cp936 -*-

不可以,一个文件最多一种编码,你写两个应该也只有第一行有效
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

0

主题

1

好友

114

积分

注册会员

Rank: 2

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

明白了 谢谢!
回复

使用道具 举报

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

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

GMT+8, 2024-4-19 20:42 , Processed in 0.021036 second(s), 25 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部