windows下py文件编码:
当print 时遇到unicode 会根据系统编码转换,
而raw_input 中的输出遇到unicode编码是不会的转码的,会报错UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-2: ordin
al not in range(128)
因为uncode的编码的第一个字符大于128(0x7f)
下面的实验能证明:
1 #coding:utf8 2 a=u'你好' 3 print 'with u:',buffer(a) 4 5 print 'per char:', 6 for i in a: 7 print ord(i), 8 print u'在文件中,变量中保存的加u的字符串会被转换为unicode类型,a变量是unicode字符串' 9 10 b='你好' 11 print '' 12 print 'without u:',buffer(b) 13 print 'percahr:', 14 for i in b: 15 print ord(i), 16 17 print u'在文件中不加u的字符串在变量中保存的 与文件指示编码一致,b变量是被utf8编码过的字符串' 18 19 c=raw_input('输入字符串: '.decode('utf8').encode('gbk')) 20 21 print u'上句raw_input 中的字符串加u会报错,raw_input的输出会直接输出到终端,不会转换为gbk' 22 m=raw_input("继续输入一个字符串: ") 23 24 print u'这是输入的字符,是gbk编码的,不会乱码:',m 25 26 print u'上一句产生乱码是因为其中的(raw_input函数中的)utf8编码的数据恰好在gbk中能对应到' 27 28 29 print type(c) 30 print u'输入的字符串:' 31 for i in c: 32 print ord(i), 33 print u'输入的字符串跟终端的环境制定的编码是一样的'