Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.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'时出现UnicodeError;ES ;SIOUF#U 1和x27;在Python 2中_Python_String_String Formatting_Python Unicode_Unicode Literals - Fatal编程技术网

格式化u'时出现UnicodeError;ES ;SIOUF#U 1和x27;在Python 2中

格式化u'时出现UnicodeError;ES ;SIOUF#U 1和x27;在Python 2中,python,string,string-formatting,python-unicode,unicode-literals,Python,String,String Formatting,Python Unicode,Unicode Literals,我有以下代码: "'{}'".format(u'ES SIOUF_1') 在Python 2中运行时,我收到以下错误: Traceback (most recent call last): File "<interactive input>", line 1, in <module> UnicodeEncodeError: 'ascii' codec can't encode character u'\xa0' in position 2: ordinal not

我有以下代码:

"'{}'".format(u'ES SIOUF_1')
在Python 2中运行时,我收到以下错误:

Traceback (most recent call last):
  File "<interactive input>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode character u'\xa0' in position 2: ordinal not in range(128)
我两个都不需要。我需要的是:

>>> "'ES SIOUF_1'"
我阅读了许多关于Python中“编码”和“解码”字符的问题,以及Python 2和Python 3在这方面的一些差异

然而,我真的不理解它们,我想为这两个版本的Python解决这个问题

我注意到的是:

type(u'ES SIOUF_1')
给出:

>>> <type 'unicode'> # PYTHON 2
>>> <class 'str'> # PYTHON 3
PYTHON 2 >>>#PYTHON 3
你掉进了角落里的陷阱。Unicode将
U+00A0
U'\xa0'
在Python表示法中)定义为不间断空格字符。它的打印方式与普通空格完全相同(
U+0020
U'\x20'
),但它是一个不同的字符,不在ASCII范围内

出于我猜不到的原因(可能是复制粘贴),您设法在unicode字符串中获得了这个不间断的空格,因此在Python3中出现了奇怪的打印,并且在Python2中无法将其转换为ascii。在Python2代码中,由于格式只是一个(字节)字符串,unicode字符串被隐式转换为ascii,这会导致异常。因此,在Python 2中,您需要使用unicode格式以避免出现错误:

u"'{}'".format(u'ES SIOUF_1')
将像在Python 3中一样工作

如何修复

正确的方法是,在尝试处理之前,先清除有问题的
u'\x20'
。如果不能,可以用普通空格明确替换它:

"'{}'".format(u'ES SIOUF_1'.replace(u'\xa0', u'\x20'))

在Python2和Python3中,都应该给出您想要的内容,这肯定是一个输入错误(大括号之间有一个额外的字符),因为它适合我(如果我复制/粘贴您的字符串)。事实上,它是“{}”格式(u'ES SIOUF_1'),所以它是正确的。怎么能为你而不是我工作?好吧,这很奇怪。。。。当我将我在这里编写的代码复制并粘贴到IDE(PyScripter)中时,我没有收到错误。但是,当我从命令历史记录复制并粘贴相同的代码时,我会收到它。WinMerge显示“空白”字符中存在差异。但是“在我看来”他们真的是一模一样的。发生什么事????“复制粘贴”中的“那个空间”可能是不同类型的吗?哇,我很惊讶!。。。非常感谢。
"'{}'".format(u'ES SIOUF_1'.replace(u'\xa0', u'\x20'))