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)
下面的实验能证明:
#coding:utf8
a=u'你好'
print 'with u:',buffer(a) print 'per char:',
for i in a:
print ord(i),
print u'在文件中,变量中保存的加u的字符串会被转换为unicode类型,a变量是unicode字符串' b='你好'
print ''
print 'without u:',buffer(b)
print 'percahr:',
for i in b:
print ord(i), print u'在文件中不加u的字符串在变量中保存的 与文件指示编码一致,b变量是被utf8编码过的字符串' c=raw_input('输入字符串:\n'.decode('utf8').encode('gbk')) print u'上句raw_input 中的字符串加u会报错,raw_input的输出会直接输出到终端,不会转换为gbk'
m=raw_input("继续输入一个字符串:\n") print u'这是输入的字符,是gbk编码的,不会乱码:',m print u'上一句产生乱码是因为其中的(raw_input函数中的)utf8编码的数据恰好在gbk中能对应到' print type(c)
print u'输入的字符串:'
for i in c:
print ord(i),
print u'输入的字符串跟终端的环境制定的编码是一样的'