【问题标题】:Upgrading Django 1.3 to 1.4 raising Unicode problems将 Django 1.3 升级到 1.4 会引发 Unicode 问题
【发布时间】:2016-05-04 21:13:55
【问题描述】:

我很难将 Django 1.3.x 升级到 Django 1.4.x。 1.4版本的开发服务器不允许以下代码:

print unicode("Nº")

1.3 工作正常,但 1.4 给出了传说中的解码错误:

'ascii' codec can't decode byte 0xc2 in position 1: ordinal not in range(128)

这是为什么呢?是否有任何关于如何处理解码的配置?

注意:打印语句只是显示问题的一种简单方式,在真正的遗留应用程序中,有大量代码将非 unicode 字符串发送到 unicode 函数。

【问题讨论】:

  • 如果你正在升级,你应该升级到 django 1.8 django 1.4 自去年 10 月起不再支持。即使您升级到 1.4,也迟早要升级到 1.8,所以这将是双倍的努力。
  • 确实如此,但我是一步一步做的,这样做似乎更容易。

标签: python django unicode upgrade


【解决方案1】:

因此可能会出现一些问题。第一个是print unicode("string") 将该字符串作为直接的非Unicode 字符串(假设这是python 2.7)。如果你把它改成print unicode(u"Nº") 可以吗?

在此之间并在您需要的地方调用 .encode('UTF-8') / decode('UTF-8') 应该会有所帮助。在 Python 2 中处理 unicode 有点痛苦。在各种 PyCons 上有很多关于 unicode 的讨论,其中许多已经发布到 youtube。如果你有一个小时或者值得观看https://www.youtube.com/watch?v=sgHbC6udIqchttps://www.youtube.com/watch?v=Mx70n1dL534

从它的声音来看,您可能只需要检查并检查您正在处理的每个字符串的每个源都通过 decode('utf-8') 或任何编码转换为 unicode 对象,尽早。或者,如果您可以直接跳到 Django 的更高版本(此时 1.8 之前的所有内容都支持零),您可能可以使用 2to3 之类的东西来更改为 Python3,并且作为副作用摆脱很多这些类型的问题。并不总是可行但值得一试 =)

【讨论】:

  • 更改为 u"Nº" 确实有效,但正如您可能想象的那样,使用 u'' 版本更改遗留系统的所有字符串似乎有点危险。从我的角度来看,奇怪的是为什么改变网络服务器版本的解码行为(我应该是语言本身的角色而不是框架)。奇怪的是,使用gunicorn_django 运行应用程序并不会导致错误发生。我现在看一下这些视频,谢谢。 :)
猜你喜欢
  • 1970-01-01
  • 2012-08-15
  • 2016-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-14
  • 2012-08-16
相关资源
最近更新 更多