Django试图将二进制数据加载为字符串。

13 浏览
0 Comments

Django试图将二进制数据加载为字符串。

在访问我的Django网站时,它试图将一个PNG图像作为字符串加载。是什么导致了这个错误?具体的错误和追踪如下所示:

UnicodeDecodeError at /home/
'utf8'编解码器无法解码位置0的字节0x89:无效的起始字节
请求方法:GET
请求URL:http://localhost:8080/home/
Django版本:1.5.5
异常类型:UnicodeDecodeError
异常值:
'utf8'编解码器无法解码位置0的字节0x89:无效的起始字节
异常位置:/usr/lib/python2.7/encodings/utf_8.py的解码,第16行
Python可执行文件:/home/michael/bin/python
Python版本:2.7.9
Python路径:
['/home/michael/code/schoolapp/projectSchoolApp',
 '/home/michael/code/schoolapp/projectSchoolApp/djangoappengine/lib',
 '/home/michael/code/appengine/google_appengine',
 '/home/michael/code/appengine/google_appengine',
 '/usr/lib/python2.7',
 '/usr/lib/python2.7/lib-dynload',
 '/home/michael/code/appengine/google_appengine/lib/protorpc-1.0',
 '/home/michael/code/appengine/google_appengine/lib/webapp2-2.3',
 '/home/michael/code/appengine/google_appengine/lib/webob-1.1.1',
 '/home/michael/code/appengine/google_appengine/lib/yaml-3.10',
 '/home/michael/code/schoolapp/projectSchoolApp/apps',
 '/home/michael/code/schoolapp/projectSchoolApp/libs']
服务器时间:Wed, 8 Jul 2015 23:17:18 +0000
Unicode错误提示
无法编码/解码的字符串是:�PNG

Traceback切换到复制粘贴视图
/home/michael/code/schoolapp/projectSchoolApp/django/core/handlers/base.py中的get_response
                        response = callback(request, *callback_args, **callback_kwargs) ...
本地变量
/home/michael/code/schoolapp/projectSchoolApp/apps/site_pages/views.py中的landing_page
        logged_user = get_logged_user(request)
 ...
本地变量
/home/michael/code/schoolapp/projectSchoolApp/libs/helpers.py中的get_logged_user
        profile_info['school'] = profile.school
 ...
本地变量
/home/michael/code/schoolapp/projectSchoolApp/django/db/models/fields/related.py中的__get__
                rel_obj = qs.get(**params) ...
本地变量
/home/michael/code/schoolapp/projectSchoolApp/django/db/models/query.py中的get
        num = len(clone) ...
本地变量
/home/michael/code/schoolapp/projectSchoolApp/django/db/models/query.py中的__len__
                self._result_cache = list(self.iterator()) ...
本地变量
/home/michael/code/schoolapp/projectSchoolApp/django/db/models/query.py中的iterator
        for row in compiler.results_iter(): ...
本地变量
/home/michael/code/schoolapp/projectSchoolApp/djangotoolbox/db/basecompiler.py中的results_iter
            yield self._make_result(entity, fields) ...
本地变量
/home/michael/code/schoolapp/projectSchoolApp/djangotoolbox/db/basecompiler.py中的_make_result
                value = self.ops.value_from_db(value, field) ...
本地变量
/home/michael/code/schoolapp/projectSchoolApp/djangotoolbox/db/base.py中的value_from_db
        return self._value_from_db(value, *self._convert_as(field)) ...
本地变量
/home/michael/code/schoolapp/projectSchoolApp/djangoappengine/db/base.py中的_value_from_db
                value = value.decode('utf-8') ...
本地变量
/usr/lib/python2.7/encodings/utf_8.py中的decode
    return codecs.utf_8_decode(input, errors, True) ...
本地变量

0
0 Comments

这个问题的原因可能是出现了解码Unicode的问题,或者你尝试读取的.png文件可能已损坏。你是否尝试过用另一个.png文件来替代问题文件,以排除这个可能性?

这个回答类似的Unicode问题的解答可能会有所帮助。

在Django中,如果尝试将二进制数据作为字符串加载时出现问题,可能有两个原因:解码Unicode的问题或损坏的文件。为了解决这个问题,可以尝试以下方法:

1. 检查文件是否损坏:尝试使用其他.png文件替代问题文件,以确定是否是文件本身的问题。如果使用其他文件成功加载,则说明原始文件可能已损坏,需要修复或替换。

2. 解码Unicode:参考类似的Unicode问题的解答,可以尝试以下解决方法:

- 确保在读取文件之前,将文件的编码设置为正确的编码。例如,如果文件是使用UTF-8编码的,可以使用以下代码设置编码:

     import codecs
     file = codecs.open('file.png', 'r', 'utf-8')
     

- 如果文件中包含特殊字符或非ASCII字符,可以尝试使用正确的编码解码。例如,使用UTF-8编码解码:

     data = file.read().decode('utf-8')
     

- 如果以上方法都无效,可以尝试使用不同的编码进行解码。根据文件内容和编码情况,可能需要尝试不同的编码格式。

通过以上方法,应该能够解决Django尝试将二进制数据作为字符串加载的问题。根据问题的具体原因,选择合适的解决方法即可。

0