u'somestring'和unicode('somestring'),python有什么区别2.7

What's the difference of u'somestring' and unicode('somestring'), python 2.7

当我将 python 字符串与 Django [=25] 连接时,出现“UnicodeDecodeError:'ascii' 编解码器无法解码位置 14 中的字节 0xc3:序号不在范围内(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 --

u"ä" 是一个 Unicode 文本——一系列 Unicode 代码点。根据字符编码可能对应不同个字节序列:

>>> u"ä".encode('utf-8')
'\xc3\xa4'
>>> u"ä".encode('cp1252')
'\xe4'
>>> u"ä".encode('utf-16le')
'\xe4\x00'

编码声明# -*- coding: utf-8 -*-指定了您的源代码编码。它只是确保 b"ä" 字节串文字被解释为 b'\xc3\xa4' 字节序列。

源代码的编码与运行时使用的编码无关。

unicode(bytestring) 相当于这里的 bytestring.decode('ascii')

>>> 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)

字节串中的非 ascii 文字字符(例如 b"ä")在 Python 3 中被弃用,unicode 类型在那里被称为 str。您可以在顶部添加 from __future__ import unicode_literals 以将 "ä" 解释为 Python 2 和 3 上的 Unicode 文本。