DjangoUnicodeDecodeError utf8编码错误解决办法
2015-05-21 10:28
609 查看
昨天和同事一起着了一个编码问题的,错误是分场景的
本次错误的场景描述:同事上网找了一个vim编辑器的配置文件。在使用中一直正常,今天编辑代码中包含中文,moldes中的别名,在admin保存的时候,报错如下:
1.首先,先分析下这个错误。似乎 是说,编码问题。
先搞清’\xd7\xf7\xc6\xb7\xc3\xfb\xb3\xc6’ 是什么
2.会不会是数据库创建的时候,编码错误呢,查看了表以及库的编码,都是utf-8。问题不是出在数据。
3.查看本机的编码配置。
4.尝试用utf8解码。decode(‘utf-8’)或encode(‘utf8’)都尝试。
5.我们在网上找到类似问题,尝试在出现问题的编码中添加如下代码:
问题没有得到解决。
6.继续尝试,可能是settings文件中需要声明,文件默认编码:
7.到底s= ‘\xd7\xf7\xc6\xb7\xc3\xfb\xb3\xc6’ 是什么呢?
嗯,问题可以确定了,中文的编码使用的是gb2312,而不是通用的utf8,这是为什么呢?
1)文件中我们已经添加了 # -- coding=UTF-8 -- 声明
2)文件头部,我们已经sys.setdefaultencoding(“utf-8”) (个人认为,来自于数据库编码问题,可以使用这种方法解决)
3)settings中,我们也声明了文件默认的编码
8.对,就是开头场景描述中,编辑器的问题
尝试使用其他编辑器打开已经编辑的编码,中文都显示为乱码。
找到vim的配置文件 vim .vimrc ,发现编码配置如下:
63 行是什么意思呢?
参考:http://blog.csdn.net/sws9999/article/details/6088645
fileencodings: Vim自动探测fileencoding的顺序列表,启动时会按照它所列出的字符编码方式逐一探测即将打开的文件的字符编码方式,并且将 fileencoding 设置为最终探测到的字符编码方式。因此最好将Unicode 编码方式放到这个列表的最前面,将拉丁语系编码方式 latin1 放到最后面。
解决办法:
再次启动程序,可用了。
本次错误的场景描述:同事上网找了一个vim编辑器的配置文件。在使用中一直正常,今天编辑代码中包含中文,moldes中的别名,在admin保存的时候,报错如下:
DjangoUnicodeDecodeError at /admin/meeting/works/add/ 'utf8' codec can't decode byte 0xd7 in position 0: invalid continuation byte. You passed in '\xd7\xf7\xc6\xb7\xc3\xfb\xb3\xc6' (<type 'str'>)
1.首先,先分析下这个错误。似乎 是说,编码问题。
先搞清’\xd7\xf7\xc6\xb7\xc3\xfb\xb3\xc6’ 是什么
print '\xd7\xf7\xc6\xb7\xc3\xfb\xb3\xc6' >>>??Ʒ???? #print乱码了。
2.会不会是数据库创建的时候,编码错误呢,查看了表以及库的编码,都是utf-8。问题不是出在数据。
3.查看本机的编码配置。
#查看本机器默认的encoding >>> import sys >>> sys.getdefaultencoding() 'ascii'
4.尝试用utf8解码。decode(‘utf-8’)或encode(‘utf8’)都尝试。
>>>s= '\xd7\xf7\xc6\xb7\xc3\xfb\xb3\xc6' >>> print s.decode('utf-8').encode('utf8') Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/encodings/utf_8.py", line 16, in decode return codecs.utf_8_decode(input, errors, True) UnicodeDecodeError: 'utf8' codec can't decode byte 0xd7 in position 0: invalid continuation byte #这和页面报错没有区别,都是编码的问题
5.我们在网上找到类似问题,尝试在出现问题的编码中添加如下代码:
import sys reload(sys) sys.setdefaultencoding("utf-8")
问题没有得到解决。
6.继续尝试,可能是settings文件中需要声明,文件默认编码:
FILE_CHARSET = 'utf-8' DEFAULT_CHARSET = 'utf-8' #仍然没有起作用
7.到底s= ‘\xd7\xf7\xc6\xb7\xc3\xfb\xb3\xc6’ 是什么呢?
#尝试用其他编码方式解码 str='\xd7\xf7\xc6\xb7\xc3\xfb\xb3\xc6' >>> str = str.decode('gb2312') >>> str u'\u4f5c\u54c1\u540d\u79f0' >>> print str 作品名称
嗯,问题可以确定了,中文的编码使用的是gb2312,而不是通用的utf8,这是为什么呢?
1)文件中我们已经添加了 # -- coding=UTF-8 -- 声明
2)文件头部,我们已经sys.setdefaultencoding(“utf-8”) (个人认为,来自于数据库编码问题,可以使用这种方法解决)
3)settings中,我们也声明了文件默认的编码
8.对,就是开头场景描述中,编辑器的问题
尝试使用其他编辑器打开已经编辑的编码,中文都显示为乱码。
找到vim的配置文件 vim .vimrc ,发现编码配置如下:
60 set encoding=utf-8 61 set termencoding=utf-8 62 set fileencoding=utf-8 63 set fileencodings=gb2312,utf-8,gbk,gb18030
63 行是什么意思呢?
参考:http://blog.csdn.net/sws9999/article/details/6088645
fileencodings: Vim自动探测fileencoding的顺序列表,启动时会按照它所列出的字符编码方式逐一探测即将打开的文件的字符编码方式,并且将 fileencoding 设置为最终探测到的字符编码方式。因此最好将Unicode 编码方式放到这个列表的最前面,将拉丁语系编码方式 latin1 放到最后面。
解决办法:
63 set fileencodings=utf-8,gbk,gb2312,gb18030
再次启动程序,可用了。
相关文章推荐
- 64位Windows 2008/7下配置IIS+PHP出现404.17错误的解决办法
- Linux下安装Coreseek提示“/src/sphinx.cpp:22292: undefined reference to”错误的解决办法
- iis7 HTTP 错误 404.13 - Not Found 请求筛选模块被配置为拒绝超过请求内容长度的请求。解决办法
- 启动Eclipse弹出:Failed to load JavaHL Library 错误框的解决办法
- T3登陆,提示Automation错误 解决办法
- aspx 上传Excel出现错误:80000401a 的解决办法
- WIndows 7 安装Microsoft .NET Framework v4.0 失败,错误HRESULT 0xc8000222解决办法
- sql server还原数据库时报错(错误码:3154)的解决办法
- httpclient 4.3中、https请求错误的解决办法
- cocoapods 错误解决办法
- SSMS局域网登录提示“该登录名来自不受信任的域不能与Windows身份验证一起使用。错误18452“解决办法
- Jenkins 打包出现You have not accepted the license agreements of the following SDK components: 错误的解决办法
- [总结]Server Application Error(IIS5 HTTP500)内部错误分析及解决办法
- GDI+中发生一般性错误的解决办法
- 在rubymine中启动应用。产生 Library not loaded: libmysqlclient.18.dylib (LoadError) 错误的解决办法
- 错误号: MSSQL_REPL20016 sql同步遇到错误的解决办法
- eclipse下启动tomcat出现Setting property 'source' to 'org.eclipse.jst.jee.server: '错误的解决办法
- 电信宽带_错误676_电话占线 解决办法
- SSH Secure File Transfer上传文件错误:encountered 1 errors during the transfer解决办法