![](/img/trans.png)
[英]App (Python Django, PostgreSql) is deployed successfully on Heroku, but I'm getting error when trying to open
[英]Python 2.7 + Django 1.7 + PostgreSQL 9.3: I'm getting a UnicodeEncodeError when trying to save some text to my database. What gives?
在我的models.py
文件中,我大致定義了一個模型,如下所示:
class MyThing(models.Model):
thing_id = models.CharField(max_length=20, unique=True, null=False)
code_snippet = models.TextField(null=True)
我正在嘗試使用從Google API中提取的一堆數據填充該表。 其中一小段是JavaScript。 從此API返回的項目之一包含JS片段,該片段引發錯誤。
我得到的錯誤是:
UnicodeEncodeError:“ ascii”編解碼器無法編碼位置213-214中的字符:序數不在范圍內(128)
令人反感的文字出現在本節中:
type="text/javascript" charset="utf-\xad\u20108"></script>
我幾乎可以肯定它是\\ xad,它必須是某種unicode轉義序列。
我檢查了PostgreSQL編碼,它使用的是UTF-8。
我還將這一行放置在我的models.py的頂部,但沒有任何區別:
from __future__ import unicode_literals
這到底是怎么回事? 為什么我的支持unicode的數據庫無法保存此字符串? 此外,我何時開始使用'ascii' codec
?
----編輯:下面的完整堆棧跟蹤-----
ERROR/MainProcess] Task apps.r2d_service.tasks.sync_jsnippets_task[e74712bf-2e04-4bed-b08c-f24f9ebb3049] raised unexpected: UnicodeEncodeError('ascii', u'<script type="text/javascript">\n window._sm_plcmnt = "finyo_5225_5119";\n var _sm_viewed = false;\n</script>\n<script src="https://cdn.company412media.com/ng/js/augur.js" type="text/javascript" charset="utf-\xad\u20108"></script>\n<script src=\'https://cdn.company412media.com/ng/pub.js\'></script>\n<script type="text/javascript">\n$$(\'#bib_actions_table tr:nth-child(1) a\').each(function (tab) {\n tab.observe(\'click\', function (e, el) {\n if (!_sm_viewed) {\n SM_Augur.init();\n _sm_viewed = true;\n }\n });\n});\n\n</script>\n', 213, 215, 'ordinal not in range(128)')
Traceback (most recent call last):
File "/home/vagrant/.virtualenvs/myapp/local/lib/python2.7/site-packages/celery/app/trace.py", line 240, in trace_task
R = retval = fun(*args, **kwargs)
File "/home/vagrant/.virtualenvs/myapp/local/lib/python2.7/site-packages/celery/app/trace.py", line 437, in __protected_call__
return self.run(*args, **kwargs)
File "/home/vagrant/myapp/apps/r2d_service/tasks.py", line 25, in sync_jsnippets_task
sync_jsnippets()
File "/home/vagrant/myapp/apps/r2d_service/sync.py", line 44, in sync_jsnippets
myapp_creative.sync(r2d_creative)
File "/home/vagrant/myapp/apps/r2d_service/models.py", line 244, in sync
self.save()
File "/home/vagrant/.virtualenvs/myapp/local/lib/python2.7/site-packages/django/db/models/base.py", line 590, in save
force_update=force_update, update_fields=update_fields)
File "/home/vagrant/.virtualenvs/myapp/local/lib/python2.7/site-packages/django/db/models/base.py", line 618, in save_base
updated = self._save_table(raw, cls, force_insert, force_update, using, update_fields)
File "/home/vagrant/.virtualenvs/myapp/local/lib/python2.7/site-packages/django/db/models/base.py", line 680, in _save_table
forced_update)
File "/home/vagrant/.virtualenvs/myapp/local/lib/python2.7/site-packages/django/db/models/base.py", line 724, in _do_update
return filtered._update(values) > 0
File "/home/vagrant/.virtualenvs/myapp/local/lib/python2.7/site-packages/django/db/models/query.py", line 600, in _update
return query.get_compiler(self.db).execute_sql(CURSOR)
File "/home/vagrant/.virtualenvs/myapp/local/lib/python2.7/site-packages/django/db/models/sql/compiler.py", line 1004, in execute_sql
cursor = super(SQLUpdateCompiler, self).execute_sql(result_type)
File "/home/vagrant/.virtualenvs/myapp/local/lib/python2.7/site-packages/django/db/models/sql/compiler.py", line 786, in execute_sql
cursor.execute(sql, params)
File "/home/vagrant/.virtualenvs/myapp/local/lib/python2.7/site-packages/django/db/backends/utils.py", line 90, in execute
logger.debug('(%.3f) %s; args=%s' % (duration, sql, params),
UnicodeEncodeError: 'ascii' codec can't encode characters in position 213-214: ordinal not in range(128)
您需要使用base64轉換這些字符串,然后可以將其保存到數據庫。
import base64
base64.b64encode("stings")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.