Django 消息框架中的 Unicode

发布于 2024-12-11 18:51:39 字数 569 浏览 0 评论 0原文

我在 Django 中有一条 Flash 消息,它是使用成员资格模型中的标准 char 字段构建的。

messages.add_message(request,
                     messages.INFO,
                     '{0} membership created'.format(membership.name))

这工作得很好,除非 memberships.name 包含 unicode 字符,在这种情况下我会收到 UnicodeEncodeError。我可以通过在字符串前面添加 u 来创建 unicode 字符串来解决此问题,但我不明白为什么这是必要的,因为 docs 声明 Django 假定所有字节串均采用 UTF-8 格式。我应该检查我的应用程序并将所有字符串更改为 unicode 字符串吗?

I have a flash message in Django that is built using a standard char field from a memberships model.

messages.add_message(request,
                     messages.INFO,
                     '{0} membership created'.format(membership.name))

This works just fine unless memberships.name contains unicode characters in which case I get a UnicodeEncodeError. I can fix this by prepending the string with u to create a unicode string but I don't understand why this is necessary as the docs state that Django assumes all bytestrings are in UTF-8. Should I be going through my app and changing all strings to unicode strings?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

浅忆流年 2024-12-18 18:51:40

这对于 Django 来说并不是真正的问题。看来您在 str.format 处理 unicode 参数的方式中遇到了错误,Python 问题 7300

一种解决方法是使用 unicode 字符串,另一种方法是使用 % 格式。

'%s membership created' % membership.name
u'{0} membership created'.format(membership.name))

This isn't really an issue with Django. It looks like you're being caught out by a bug in the way str.format handles unicode arguments, Python Issue 7300

One workaround is to use a unicode string, another is to use % formatting.

'%s membership created' % membership.name
u'{0} membership created'.format(membership.name))
半世晨晓 2024-12-18 18:51:40

是的。
那些实际上是字节字符串的除外,因为它们是从文件等中读取的。

Yes.
Except those that are actually byte-strings because they were read from a file or so.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文