python UnicodeDecodeError: ‘gbk’ codec can’t decode bytes in position
如果你的源码中只含有ANSI字符,如全是英文,那么编辑和保存源码时候,不需要额外的任何修饰和说明,但是如果你如果你还有中文的时候,那么你必须指定这个源码文件的编码格式。否则在你保存的时候会弹出错误,提示添加编码说明符,我使用python自带的IDE – IDLE。
对于中文的我们可以使用
# -*- coding: cp936 -*-
这行代码需要加到文件的第一行。定义中文的资源可以这样定义:
CHSTR1 = ‘中文这里’
但是如果你的文件中不止中文,还有其他的,比如西班牙语,如果你使用上面的编码方式 cp936,IDLE会拒绝保存,会提示你保存为 UTF-8。
好,我们就按照提示保存,第一行变为:
# -*- coding: UTF-8 -*-
源码变成:
SPSTR= ‘No hay nueva versión disponible' CHSTR1 = '中文这里' dlg = wx.MessageDialog( None, CHSTR1, '', wx.OK ) dlg.ShowModal()
运行这段代码,结果出错:
File “C:Python27libsite-packageswx-2.8-msw-unicodewx_windows.py”, line 2922, in __init__
_windows_.MessageDialog_swiginit(self,_windows_.new_MessageDialog(*args, **kwargs))
UnicodeDecodeError: ‘gbk’ codec can’t decode bytes in position 2-3: illegal multibyte sequence
原因是编码不对。那是因为我们定义字符串的时候,没有定义成unicode。定义unicode字符串,只需要在前面加一个u。因此上面的代码变成:
# -*- coding: UTF-8 -*- SPSTR= u'No hay nueva versión disponible' CHSTR1 = u'中文这里' dlg = wx.MessageDialog( None, CHSTR1, '', wx.OK ) dlg.ShowModal()
总结,如果只有中文和英文,那么可以使用cp936,如果多个语言可以使用UTF-8,字符串前面加上u。当然你可以把这些资源文成不同的文件那么这样你可以使用不同的编码的方式。
完
版权所有,禁止转载. 如需转载,请先征得博主的同意,并且表明文章出处,否则按侵权处理.
很好,受教了!