作者StubbornLin (Victor)
看板Python
标题Re: [问题] 中文编码的疑惑..
时间Mon Nov 17 22:10:16 2008
※ 引述《milua (milua)》之铭言:
: 刚学习python
: print 中文的问题一直困扰着我
: 但又解决不了
: 我的ide 是 eclispe + pydev
: 我写了一个test code为
: =========python code=======
: #-*- coding: utf-8 -*-
: print '科科'
: ===========================
: 存档编码,我是选utf8
: 用windows cmd 执行 出来的结果为
: 蝘?
因为在这里你是用utf8去编python的档案,'科科'被当做utf8编码
#-*- coding: utf-8 -*-
print '科科'
print repr('科科')
蝘?
'\xe7\xa7\x91\xe7\xa7\x91'
这麽看来就明白了,因为ascii的普通str,应该会被直接输出
没有经过编码,所以就直接等於用ascii来输出utf8的内容
会有乱码是理所当然的 这就等於直接印出binary的那串资料而已
你的windows console不会认得utf8的编码,它是用cp950的方式去解码
用cp950去解utf8 结果就会是乱码
'\xe7\xa7' 可能刚好被解码成cp950的 蝘 所以才看得到 其它就是一团糟
: 如果换成 print u'科科'
#-*- coding: utf-8 -*-
print u'科科'
print repr(u'科科')
如果是unicode的字串,就不一样了,由於Python认得了它是unicode的字串
知道该用怎样正确的方式把它解码成unicode的字串
科科
u'\u79d1\u79d1'
并且,在print时,会依照sys.stdout.encoding去编码字串
在你的环境,也就是cp950
u'\u79d1\u79d1' 就会被重编成 cp950编码的 '科科'
这时候windows的console就认得了,因为它一直都是用cp950在解码
cp950的码c950来解 当然就没问题
基本上Python都支援unicode了,就用unicode也就是u开头的字串就好
如果非要让非u开头的字串也能正确印出来的话,那就将计就计
反正它被变成utf8,那就用utf8去解码,转成unicode
再印出来,像这样
#-*- coding: utf-8 -*-
print '科科'.decode('utf8')
print repr('科科'.decode('utf8'))
可是这样到头来绕一圈都是一样的,那何苦多绕一圈
就直接用unicode就可以了
--
哇咧咧 创意投票系统
http://walele.com
易记学 程式设计教学
http://ez2learn.com/
易记学 程式设计讨论区
http://forum.ez2learn.com
VICTOR's 个人Blog
http://blog.ez2learn.com/
财报分析王
http://victorlin.serveftp.org/stock/
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 118.170.81.119