当前位置: 首页 > 面试题库 >

python-使用Django将Unicode字符存储到MySQL时出现问题

寿子轩
2023-03-14
问题内容

我有绳子

 u"Played Mirror's Edge\u2122"

应该显示为

 Played Mirror's Edge™

但这是另一个问题。我手头的问题是,我将其放入模型中,然后尝试将其保存到数据库中。又名:

a = models.Achievement(name=u"Played Mirror's Edge\u2122")
a.save()

我得到:

'ascii' codec can't encode character u'\u2122' in position 13: ordinal not in range(128)

全栈跟踪(根据要求):

Traceback:
File "/var/home/ptarjan/django/mysite/django/core/handlers/base.py" in get_response
  86.                 response = callback(request, *callback_args, **callback_kwargs)
File "/var/home/ptarjan/django/mysite/yourock/views/alias.py" in import_all
  161.     types.import_all(type, alias)
File "/var/home/ptarjan/django/mysite/yourock/types/types.py" in import_all
  52.     return modules[type].import_all(siteAlias, alias)
File "/var/home/ptarjan/django/mysite/yourock/types/xbox.py" in import_all
  117.             achiever = self.add_achievement(dict, siteAlias, alias)
File "/var/home/ptarjan/django/mysite/yourock/types/base_profile.py" in add_achievement
  130.                 owner       = siteAlias,
File "/var/home/ptarjan/django/mysite/django/db/models/query.py" in get
  304.         num = len(clone)
File "/var/home/ptarjan/django/mysite/django/db/models/query.py" in __len__
  160.                 self._result_cache = list(self.iterator())
File "/var/home/ptarjan/django/mysite/django/db/models/query.py" in iterator
  275.         for row in self.query.results_iter():
File "/var/home/ptarjan/django/mysite/django/db/models/sql/query.py" in results_iter
  206.         for rows in self.execute_sql(MULTI):
File "/var/home/ptarjan/django/mysite/django/db/models/sql/query.py" in execute_sql
  1734.         cursor.execute(sql, params)
File "/var/home/ptarjan/django/mysite/django/db/backends/util.py" in execute
  19.             return self.cursor.execute(sql, params)
File "/var/home/ptarjan/django/mysite/django/db/backends/mysql/base.py" in execute
  83.             return self.cursor.execute(query, args)
File "/usr/lib/pymodules/python2.5/MySQLdb/cursors.py" in execute
  151.             query = query % db.literal(args)
File "/usr/lib/pymodules/python2.5/MySQLdb/connections.py" in literal
  247.         return self.escape(o, self.encoders)
File "/usr/lib/pymodules/python2.5/MySQLdb/connections.py" in string_literal
  180.                 return db.string_literal(obj)

Exception Type: UnicodeEncodeError at /import/xbox:bob
Exception Value: 'ascii' codec can't encode character u'\u2122' in position 13: ordinal not in range(128)

以及模型的相关部分:

class Achievement(MyBaseModel):
    name = models.CharField(max_length=100, help_text="A human readable achievement name")

我在我的settings.py中使用的是MySQL后端

DEFAULT_CHARSET = 'utf-8'

因此,基本上,我该如何处理所有这些unicode内容?我希望,如果我远离有趣的字符集并坚持使用UTF8,一切都会“正常工作”。las,这似乎不那么容易。


问题答案:

谢谢所有在这里发帖的人。它确实有助于我的unicode知识(并希望其他人也学到了一些东西)。

因为我试图简化问题并且没有提供所有信息,所以我们似乎都在错误树上。似乎我不是在使用“ REAL”
Unicode字符串,而是在将BeautifulSoup.NavigableString当作Unicode字符串来使用。因此,所有打印输出看起来都像unicode,但事实并非如此。

在MySQLDB库的某个深处,它们无法处理这些字符串。

这工作:

>>> Achievement.objects.get(name = u"Mirror's Edge\u2122")
<Achievement: Mirror's Edge™>

另一方面 :

>>> b = BeautifulSoup(u"<span>Mirror's Edge\u2122</span>").span.string
>>> Achievement.objects.get(name = b)
... Exceptoins ...
UnicodeEncodeError: 'ascii' codec can't encode character u'\u2122' in position 13: ordinal not in range(128)

但这有效:

>>> Achievement.objects.get(name = unicode(b))
<Achievement: Mirror's Edge™>

因此,再次感谢您提供的所有unicode帮助,我相信它会派上用场。但现在 …

警告 :BeautifulSoup不会返回 REAL
unicode字符串,在对它们进行任何有意义的操作之前,应将其与unicode()进行强制转换。



 类似资料:
  • 问题内容: 我必须将印地文文本存储在MySQL数据库中,使用PHP脚本获取它并将其显示在网页上。我做了以下事情: 我创建了一个数据库,并将其编码设置为UTF-8,并将排序规则设置为。我在表中添加了一个varchar字段,并将其设置为在charset属性中接受UTF-8文本。 然后我开始向其中添加数据。在这里,我不得不从现有站点复制数据。印地文文本看起来像这样:सूर्योदय:05:30 我直接将

  • 我想把我的ip地址连接到一个域名。当我在浏览器“my.ip.adress”中运行时,服务器会响应,但当我尝试使用“mydomain.com”时,它就不起作用了。我有一个404错误。在我的托管平台中,我将“my.ip.adress”链接到域名。我已经等待了48小时,因为它建议链接ip与域名。 我不确定我做的配置。也许我的env文件“.env-prod”没有被调用,管道破裂了 我的env文件:.env

  • 问题内容: 尝试将first_name,last_name保存到Django的auth_user模型时,出现奇怪的错误消息。 失败的例子 成功的例子 MySQL设置 表字符集和排序规则 表auth_user具有utf-8字符集,并带有utf8_general_ci排序规则。 UPDATE命令的结果 使用UPDATE命令将上述值更新到auth_user表时,它没有引发任何错误。 PostgreSQL

  • 我需要调用MySQL存储过程从我的python脚本。作为参数之一,我传递一个Unicode字符串(俄语),但我得到一个错误; UnicodeEncodeError:“latin-1”编解码器无法对位置0-1中的字符进行编码:序号不在范围(256)内 我的脚本: 我已经读过设置可以解决这个问题,但是当我使用字符串时: 这给了我另一个错误; UnicodeEncodeError:'utf-8'编解码器

  • 问题内容: 我正在尝试使用AWS Lambda Python(Python初学者)启动并运行,但是在包含MySQL依赖项时遇到了一些问题。我试图按照指示在这里我的Mac上。 对于第3步,我在项目的根目录执行命令遇到一些问题 错误: 例外:追溯(最近一次通话最近):文件“ /Library/Python/2.7/site- packages/pip-1.5.6-py2.7.egg/pip/basec

  • 问题内容: 我遇到了一个在Hibernate和MySql中使用UUID的博客。现在的问题是,每当我查看数据库时,ID的格式都是不可读的(二进制16)。如何将UUID存储为可读格式,而不是 我正在使用此代码 结果是 ¡7ôáßEN¹º}ÅÑs 。但是我希望它是可读的UUID,所以我使用了以下代码,但对我没有帮助 如何在不更改Java类型UUID的情况下将UUID保存为字符串而不是二进制(16) 问题

  • 问题内容: 正在尝试在Python中进行系统调用,并将输出存储到我可以在Python程序中操作的字符串中。 我已经尝试了一些方法,包括此处的一些建议: 问题答案: 在Python 2.7或Python 3中 Popen你可以使用函数将命令的输出存储在字符串中,而不是直接创建对象: 在Python 2.4-2.6中 使用方法。 是你想要的。 有关其他答案的重要说明 请注意我如何传递命令。该示例提出了

  • 我正在构建一个Django应用程序,它有几个应用程序。使用SQLite数据库作为后端运行良好。当我试图使用“manage.py migrate”将后端迁移到Oracle时,我发现了以下错误 django.db.utils.DatabaseError:ORA-01950:对表空间“XXXXXX”没有权限 当我在数据库中检查我的用户权限时,它有创建表、视图等的权限。我尝试执行“manage.py sq