| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2451 人关注过本帖
标题:新手问关于中文编码转换问题 -- 如何从gb2312 转换回 utf-8
只看楼主 加入收藏
erv2
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2010-4-1
结帖率:0
收藏
已结贴  问题点数:0 回复次数:12 
新手问关于中文编码转换问题 -- 如何从gb2312 转换回 utf-8
大家好,我是python的新手,也是这个论坛的新人.正在学习用python做蜘蛛爬虫

我碰到的一个问题就是

我的蜘蛛返回一个unicode的对象是这样的
>>> su
u'\xc0\xe0\xb1\xf0'

怎样才能把这个su的对象转换回utf-8呢?

我试过用 su.encode('utf-8'),会出现以下的错误:
Traceback (most recent call last):
  File "<console>", line 1, in <module>
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc0 in position 0: ordinal not in range(128)

各位高手,帮帮我这个新人吧.谢谢
搜索更多相关主题的帖子: 编码 中文 
2010-04-01 16:53
外部三电铃
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:那一年
等 级:贵宾
威 望:57
帖 子:2012
专家分:7306
注 册:2007-12-17
收藏
得分:6 
最好有相关代码或者发上来一个模型代码,不然别人也不知道是什么问题

那一年,苍井空还是处女
2010-04-01 16:59
erv2
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2010-4-1
收藏
得分:0 
也不用代码模型了
在console中输入:

su = u'\xc0\xe0\xb1\xf0'  (这个是"类别"的gb2312码)

怎么转换才能用print 语句输出"类别"在console上呢?
2010-04-01 17:04
erv2
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2010-4-1
收藏
得分:0 
顶一顶

[ 本帖最后由 erv2 于 2010-4-1 17:28 编辑 ]
2010-04-01 17:27
yangfanconan
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:10
帖 子:397
专家分:541
注 册:2009-9-22
收藏
得分:6 
我感觉先转u再转utf8
2010-04-03 08:14
yangfanconan
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:10
帖 子:397
专家分:541
注 册:2009-9-22
收藏
得分:0 
因为你的问题没有代码我也不知道怎么回答。但是编译器提示的ascii这个码是面向英语的。没有中文。你是不是转换的出现问题了?很多人对unicode和utf8搞不大懂,不知什么时候用unicode,什么时候用utf8。介绍一下常用的方法。这段话出自茶莉的编程宝典。希望对你有帮助。
2010-04-03 08:21
yangfanconan
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:10
帖 子:397
专家分:541
注 册:2009-9-22
收藏
得分:0 
介绍一:
首先,我们要了解,哪些字符是utf8!
从严格意义上讲,所有字符均为utf8编码,包括中文、英文、符号!
注意,英文也是utf8编码的!!
如下面这些都是utf8编码的:
'a' , 'abc' , '_编程_' , '2008'
'beijing2008'
但是,有时候我们需要通用编码:unicode!
unicode是国际常用通用编码!
要将上面那些转为unicode编码,只需在字符串后加个.decode('utf8')
意思是将字符串原为utf8,反编为unicode

'abc'.decode('utf8')
意思是将'abc'从utf8编码转为unicode编码!
需要说明的是:
英文和数字型字符串能够强制从任意编码转为unicode,因此可写成u'abc',这样就代表了unicode码!因为英文的任意编码是相同的!
其次,要了解混合编码的问题:
如:
'abc'+u'abc'
这是由utf8编码加上unicode编码!
结果从严格意义上讲是unicode编码!但有些函数传递字符串时会强制转化。
最后!
那什么时候用utf8,什么时候用unicode?
没有明确说法,要看函数、模块是要什么编码的!
以下是常用要utf8编码的:
open()打开文件
os模块下的大多数函数
解释:
open('d:\\测试.txt','w')是正确的
open('d:\\测试.txt'.decode('utf8'),'w')就会异常
os模块下有一些也是要传递变量的,如
os.path.isfile(路径)判断路径是否为文件。这里的路径也要utf8的。
用unicode编码的,最常用的是appuifw模块!

appuifw.app.menu菜单
appuifw.app.title标题
appuifw.Text()文本窗口
好了,看个例子:
import powlite_fm
path=powlite_fm.manager().AskUser()
path=path.encode('utf8')
file=open(path)
get=file.read()
file.close()
注意:path=path.encode('utf8')这句是将path从unicode编译成utf8编码!
powlite_fm模块的返回值(path)是unicode编码的!
但是,后面的open却需要utf8编码的,因此需要将path从unicode编译成utf8编码!
这就是所谓的不支持中文路径的原因!


介绍二:
中文是utf8编码的,要显示出中文,在文本窗口和提示框都是用unicode编码,就要将utf8转化为unicode,因此,要显示中文“你好”,就得用decode('utf8')
print u'hello'
print '你好'.decode('utf8')
import appuifw
appuifw.note(u'hello')
appuifw.note('你好'.decode('utf8'))
例:将“你好China2008”以u码保存在d:\a.txt:
不知为何,别人说u码是unicode码,而python里不能以unicode保存,而用utf16保存却是u码。具体原因不知,知道的说下!
txt='你好China2008'.decode('utf8').encode('UTF-16')
file=open('d:\\a.txt','w')
file.write(txt)
file.close()
例:将“China2008”以A码保存在d:\a.txt:
不知为何,A码不能保存中文,知道方法的说下!
txt='China2008'.decode('utf8').encode('ascii')
file=open('d:\\a.txt','w')
file.write(txt)
file.close()
2010-04-03 08:24
yangfanconan
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:10
帖 子:397
专家分:541
注 册:2009-9-22
收藏
得分:0 
前面我已经说过了A码是面向英语和英文符号的。所以不能存中文。
2010-04-03 08:26
yangfanconan
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:10
帖 子:397
专家分:541
注 册:2009-9-22
收藏
得分:0 
在使用GB2312的程序中,通常采用EUC储存方法,以便兼容于ASCII。浏览器编码表上的“GB2312”,通常都是指“EUC-CN”表示法。
2010-04-03 08:29
yangfanconan
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:10
帖 子:397
专家分:541
注 册:2009-9-22
收藏
得分:0 
 同时还要注意,在标准ASCII中,其最高位(b7)用作奇偶校验位。所谓奇偶校验,是指在代码传送过程中用来检验是否出现错误的一种方法,一般分奇校验和偶校验两种。奇校验规定:正确的代码一个字节中1的个数必须是奇数,若非奇数,则在最高位b7添1;偶校验规定:正确的代码一个字节中1的个数必须是偶数,若非偶数,则在最高位b7添1。
2010-04-03 08:38
快速回复:新手问关于中文编码转换问题 -- 如何从gb2312 转换回 utf-8
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015546 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved