![]() |
1
4
这是可行的,因为在处理“a”时,它使用其Unicode表示(即 统一码 方法) 但是,当您将它包装在一个列表中时,例如'[a]'…当您试图将该列表放入字符串时,所调用的是unicode([a])(在列表的情况下与repr相同),列表的字符串表示形式,它将使用“repr(a)”在其输出中表示您的项。这将导致一个问题,因为您传递的是包含“a”的UTF-8编码版本的“str”对象(字节字符串),当字符串格式试图将其嵌入到Unicode字符串中时,它将尝试使用hte默认编码(即ascii)将其转换回Unicode对象。因为ascii没有它试图转换的任何字符,所以它失败了。
你想做的事情必须这样做:
为了获得更好的解决方案(如果仍然希望字符串看起来像list str),您必须使用前面建议的内容,并使用join,如下所示:
U
尽管这不会处理包含A对象列表的列表。 我的解释听起来很不清楚,但我希望你能理解。 |
![]() |
2
3
尝试:
您的主要问题是您进行的转换比预期的要多。让我们考虑一下:
's' String (converts any python object using str()). If the object or format provided is a unicode string, the resulting string will also be unicode. 处理%s格式字符串时,将应用str([a])。此时您拥有的是一个字符串对象,其中包含一系列Unicode字节。如果您尝试打印这个,没有问题,因为字节直接传递到您的终端并由终端呈现。
当您试图将其转换回Unicode时,问题就出现了。本质上,函数unicode是对包含unicode编码字节序列的字符串调用的,这就是导致ascii编解码器失败的原因。 >>> u"%s" % x Traceback (most recent call last): File "", line 1, in UnicodeDecodeError: 'ascii' codec can't decode byte 0xc2 in position 1: ordinal not in range(128) >>> unicode(x) Traceback (most recent call last): File "", line 1, in UnicodeDecodeError: 'ascii' codec can't decode byte 0xc2 in position 1: ordinal not in range(128) |
![]() |
3
2
首先,问问自己你想达到什么目标。如果您所需要的只是列表的可循环表示,那么只需执行以下操作:
这就是它应该如何工作的。python列表的字符串表示不是用户应该看到的,所以在其中包含转义字符是有意义的。 |
![]() |
4
1
如果您想使用
|
![]() |
5
1
由于这个问题涉及到很多令人困惑的Unicode内容,我想我会提供一个关于这里发生了什么的分析。
这一切归结于
事实上,
当你写:
最后一行是repr(a)的扩展,使用
因此,正如您所看到的,对象首先是以UTF-8编码的,后来才使用系统默认编码进行解码,通常不支持所有字符。 正如上面提到的其他一些答案,您可以编写自己的函数,甚至子类列表,比如:
请注意,此格式不支持Round-Trippable。它甚至可能误导:
当然,你可以写
要更好地了解什么时候会发生什么,请使用这个小类:
|
![]() |
6
0
再PR 和 STR 它们都应该返回str对象,至少在python 2.6.x中是这样的。由于repr()试图将结果转换为str,所以会出现解码错误,但失败了。 我相信这在python 3.x中已经改变了。 |
![]() |
7
0
|
![]() |
July · 如何定义数字间隔,然后四舍五入 1 年前 |
![]() |
user026 · 如何根据特定窗口的平均值(行数)创建新列? 1 年前 |
|
Ashok Shrestha · 需要追踪特定的颜色线并获取坐标 1 年前 |
![]() |
Nicote Ool · 在FastApi和Vue3中获得422 1 年前 |
|
Abdulaziz · 如何对集合内的列表进行排序[重复] 1 年前 |
![]() |
asmgx · 为什么合并数据帧不能按照python中的预期方式工作 1 年前 |