2014-12-02 83 views
2

我views.py:的Python/Django的的UnicodeDecodeError 'ASCII' 编解码器不能解码

# -*- coding: UTF-8 -*- 
def myview(request): 
    object = MyObject.objects.get(id = 1) 
    testvar = u"test %s" % object.myfield 

而且我得到了错误:

UnicodeDecodeError at /myurl 
'ascii' codec can't decode byte 0xc4 in position 1: ordinal not in range(128) 

Unicode error hint 
The string that could not be encoded/decoded was: J������ 

的J - MyField的价值 在数据库中,这个字段是utf8_bin。 在模型这一领域是CharField

sys.getfilesystemencoding() #- UTF-8 
sys.getdefaultencoding() #- ascii 
sys.getdefaultencoding() #- ascii 
locale.getdefaultlocale() #- ('en_US', 'UTF-8') 
locale.getlocale() #- (None, None) 

的Python 2.7.6 Django的1.5.8

我也试过:

object.myfield.decode("utf8") 

,并得到错误:

UnicodeEncodeError at /myurl 
'ascii' codec can't encode characters in position 6-10: ordinal not in range(128) 

我有这个对象的管理方 - 即使使用utf-8 sy,一切都很完美mbols。

如果我打印出object.myfield的类型,然后我得到:

<type 'str'> 
+0

我不知道你的问题的第一位,但最后Python会先对其进行编码(与ASCII编码解码器),所以:你在哪里得到一个“不能带* *代码”试图*德*代码的值发生在Python 2.x中,当您尝试解码unicode字符串位它可以尝试解码它。这对我说,你的领域已经是unicode,所以主要问题可能不在你向我们展示的行中,而是在其他地方尝试将unicode值编码为ascii。 – Duncan 2014-12-02 16:01:26

+0

'myfield'是外键吗?如果是,你可以发布[__str __()和__unicode__()](https://docs.djangoproject.com/en/dev/ref/unicode/#choosing-between-str-and-unicode)相关的模式? – danihp 2014-12-02 17:25:19

+0

邓肯,我的代码抛出第一个错误,直到解码()的一部分 - 在这部分“U”测试%的“%object.myfield” – user3564666 2014-12-02 20:58:16

回答

0

试试这个

def myview(request): 
    object = MyObject.objects.get(id = 1) 
    testvar = u"test %s" % object.myfield.**decode('utf-8')** 
+0

为了使这个伟大的回答,请解释这是做什么的 – 2017-02-09 08:36:46

相关问题