u'somestring'和unicode('somestring')、Python2.7有什么区别
当我将python字符串与Django model.CharField连接时,我得到了“UnicodeDecodeError:”ascii“编解码器无法解码位置14:ordinal not in range128”中的字节0xc3,如下所示:u'somestring'和unicode('somestring')、Python2.7有什么区别,python,django,unicode,character-encoding,decoding,Python,Django,Unicode,Character Encoding,Decoding,当我将python字符串与Django model.CharField连接时,我得到了“UnicodeDecodeError:”ascii“编解码器无法解码位置14:ordinal not in range128”中的字节0xc3,如下所示: some_variable = unicode("jotain älähti") + self.some_charfield 在我切换到这个之后: some_variable = u"jotain älähti" + self.some_charfiel
some_variable = unicode("jotain älähti") + self.some_charfield
在我切换到这个之后:
some_variable = u"jotain älähti" + self.some_charfield
它不再引起错误。python中的u和unicode函数有什么区别?我正在使用Python2.7.5和Django 1.7.1,为什么它不再引发错误
我不知道为什么首先要解码。解码不是从字节形成人类可读字母和单词的过程吗?在这种情况下,如果我需要打印它,我会理解解码,但我从未打印过。解码是否与级联过程有关?为了让程序连接,它需要对这两个字符串进行解码,然后才能进行连接,然后将它们编码为字节?我在文件的开头输入了这样的编码方法:--coding:utf-8--uä是一个Unicode文本-一个Unicode代码点序列。它可能对应于不同的字节序列,具体取决于字符编码:
>>> u"ä".encode('utf-8')
'\xc3\xa4'
>>> u"ä".encode('cp1252')
'\xe4'
>>> u"ä".encode('utf-16le')
'\xe4\x00'
编码声明-*-coding:utf-8-*-指定源代码编码。它只是确保将bäbytestring文本解释为b'\xc3\xa4'字节序列
源代码的编码与运行时使用的编码无关
unicodebytestring相当于bytestring。在这里解码“ascii”
Python3中不推荐使用非ascii文本字符,例如bytestring中的bä,unicode类型在那里称为str。您可以在Python 2和Python 3的顶部添加来自“未来”的“导入unicode”文本,将ä解释为unicode文本。看看这个答案:您需要指定编码unicodejotainälähti,encoding=utf8,unicode试图解码为ascii。@MalikBrahimi它们不一样。unicode本身接受ASCII字符串,并将其转换为以u为前缀的unicode字符串。这就是OP出错的原因。在第二个示例中,OP在字符串之前添加了u,使其成为unicode文本,因此没有错误。谢谢,我想我已经找到了!:
>>> b'\xc3\xa4'.decode('ascii')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 0: ordinal not in range(128)