烦人的python编码
sdem
2009-05-08
先说print的问题。请比较3和2.6的区别。直说吧,在2.6中,print ('aa', 'bb'),是输出一个tuple,而不是一个字符串。
Python 3.0.1 (r301:69561, Feb 13 2009, 20:04:18) [MSC v.1500 32 bit (Intel)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> print('aa','bb') aa bb >>> Python 2.6.2 (r262:71605, Apr 14 2009, 22:40:02) [MSC v.1500 32 bit (Intel)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> print ('aa', 'bb') ('aa', 'bb') >>> |
|
sdem
2009-05-08
xiaobin268 写道 sdem 写道 如果LZ贴出所谓的“乱码”,80%以上的人都能告诉你错在哪里了。哈哈。
好吧,我贴出来。声明一下,我的代码头部已经加上了#coding=gbk ,('line---->', ' \xc4\xe3\xba\xc3\n'). 先说第一个问题,#coding=gbk。 你可以试一试,没有#coding=gbk的情况,脚本文件中不要有非ASCII字符。 filename = raw_input('please enter file name:') f = open(filename) for line in f: print ('line---->', line) f.close() 现在无论你读入的文件是什么编码,你都可以用这个文件打印了。 |
|
sdem
2009-05-08
xiaobin268 写道 sdem 写道 如果LZ贴出所谓的“乱码”,80%以上的人都能告诉你错在哪里了。哈哈。
好吧,我贴出来。声明一下,我的代码头部已经加上了#coding=gbk ,('line---->', ' \xc4\xe3\xba\xc3\n'). 再来说说第二个问题,就是编码的问题,这几乎是月经帖了。 Python 2.6.2 (r262:71605, Apr 14 2009, 22:40:02) [MSC v.1500 32 bit (Intel)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> line = '\xc4\xe3\xba\xc3' #gbk 编码 >>> print line 你好 >>> u = line.decode('gbk') #unicode 编码 >>> u u'\u4f60\u597d' >>> print u 你好 >>> gbk = u.encode('gbk') #回到GBK编码 >>> gbk '\xc4\xe3\xba\xc3' >>> print gbk 你好 >>> u8 = u.encode('utf-8') #utf-8编码 >>> u8 '\xe4\xbd\xa0\xe5\xa5\xbd' >>> print u8 #这才是真正的乱码 浣犲ソ >>> 而是否出现乱码的原因,是由操作系统,更具体点说,是你支持你的print语句的终端程序决定的。比如,打印utf-8在Windows的cmd下,是乱码,在windows的UltraEdit下,打印可能不是乱码。 |
|
sdem
2009-05-08
结论。
一、编码说明。编码说明是说明脚本文件本身的。如果你的脚本文件本身使用了非ASCII码,你应该在文件开头说明。如# -*- coding:gbk -*- 二、打印字符串,不能加括号。print('line----> ',line)打印的元组,而不是字符串。当然3.0以后的print语句不在此列。 三、编码转换。 如果文件的编码是GBK,你操作的终端也是支持GBK的,你不需要转换。 如果文件的编码是UTF8,而你操作的终端只支持GBK,不支持UTF8,你需转码。 转码方式如下: >>> utf8 = '\xe4\xbd\xa0\xe5\xa5\xbd' #请比较楼上注意这是UTF8编码 >>> print utf8.decode('UTF8').encode('GBK') 你好 >>> |
|
xiaobin268
2009-05-08
sdem 写道 结论。
一、编码说明。编码说明是说明脚本文件本身的。如果你的脚本文件本身使用了非ASCII码,你应该在文件开头说明。如# -*- coding:gbk -*- 二、打印字符串,不能加括号。print('line----> ',line)打印的元组,而不是字符串。当然3.0以后的print语句不在此列。 三、编码转换。 如果文件的编码是GBK,你操作的终端也是支持GBK的,你不需要转换。 如果文件的编码是UTF8,而你操作的终端只支持GBK,不支持UTF8,你需转码。 转码方式如下: >>> utf8 = '\xe4\xbd\xa0\xe5\xa5\xbd' #请比较楼上注意这是UTF8编码 >>> print utf8.decode('UTF8').encode('GBK') 你好 >>> 非常好,真是谢谢你了。 |