Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
u'somestring'和unicode('somestring')、Python2.7有什么区别_Python_Django_Unicode_Character Encoding_Decoding - Fatal编程技术网

u'somestring'和unicode('somestring')、Python2.7有什么区别

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

当我将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_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)