windows下python 编码问题

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('输入字符串:\n'.decode('utf8').encode('gbk'))

20 

21 print u'上句raw_input 中的字符串加u会报错,raw_input的输出会直接输出到终端,不会转换为gbk'

22 m=raw_input("继续输入一个字符串:\n")

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'输入的字符串跟终端的环境制定的编码是一样的'

 

你可能感兴趣的:(windows)