【发布时间】:2015-06-21 19:03:04
【问题描述】:
当我将 python 字符串与 Django model.CharField 连接时,我得到了 'UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 14: ordinal not in range(128)':
some_variable = unicode("jotain älähti") + self.some_charfield
在我切换到这个之后:
some_variable = u"jotain älähti" + self.some_charfield
它不再引发错误。 u和python中的unicode函数有什么区别?我正在使用 python 2.7.5 和 Django 1.7.1 为什么它不再引发错误?
我不知道为什么它必须首先解码。解码不是从字节形成人类可读的字母和单词的过程吗?如果我需要打印它,我会理解这种情况下的解码,但我从未打印过它。解码是否与连接过程有关?那为了让程序连接,它需要解码这两个字符串,然后才能进行连接,然后将它们编码为字节?我在文件开头输入了这样的编码方法:# -- coding: utf-8 --
【问题讨论】:
-
你需要指定编码
unicode("jotain älähti",encoding="utf8"),unicode正在尝试解码为ascii。 -
@MalikBrahimi 他们不一样。
unicode()自己接受一个 ASCII 字符串并将其转换为 unicode 字符串(以u为前缀)。这就是 OP 收到错误的原因。在第二个示例中,OP 在字符串前添加了u,使其成为 unicode 文字,因此没有错误。 -
谢谢,我想我明白了! :)
标签: python django unicode character-encoding decoding