Django试图将二进制数据加载为字符串。
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) ... 本地变量
这个问题的原因可能是出现了解码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尝试将二进制数据作为字符串加载的问题。根据问题的具体原因,选择合适的解决方法即可。