Python 2.7 - 为什么在列表中使用 .append() 时 Python 会对字符串进行编码?

5

我的问题字符串

# -*- coding: utf-8 -*-
print ("################################")
foo = "СТ142Н.0000"
print (type(foo))
print("foo: "+foo)
foo_l = []
foo_l.append(foo)
print ("List: " )
print (foo_l)
print ("List decode: ")
print([x.decode("UTF-8") for x in foo_l])
print("Pop: "+foo_l.pop())

打印结果:

################################
<type 'str'>
foo: СТ142Н.0000
List: 
['\xd0\xa1\xd0\xa2142\xd0\x9d.0000']
List decode: 
[u'\u0421\u0422142\u041d.0000']
Pop: СТ142Н.0000

这个很好 运作良好,我只是用键盘手动输入字符串“CT142H.0000”(这是相同的代码)。
print ("################################")
foo = "CT142H.0000"
print(type(foo))
print("foo: "+foo)
foo_l = []
foo_l.append(foo)
print ("List: ")
print (foo_l)
print ("List decode: ")
print([x.decode("UTF-8") for x in foo_l])
print("Pop: "+foo_l.pop())

打印结果:

################################
<type 'str'>
foo: CT142H.0000
List: 
['CT142H.0000']
List decode: 
[u'CT142H.0000']
Pop: CT142H.0000

为什么当我把第一个字符串添加到列表中时,Python会对其进行编码?

-----------------------------------------------

目前已经解决了,我担心那些字符,所以我将“结果”放在 JSON 中,然后在网站上使用,最终在网站上它可以正常工作!

-----------------------------------------------

我找到了另一种解决方案,但这不是正确的解决方案,因为在某些情况下会有问题。

json.dumps(list, ensure_ascii=False)

感谢您的支持!

1个回答

11

因为尽管它们看起来像普通的 C / T / H 字符,但实际上它们并不是这些字符。

它们是 西里尔文 字符。

С - 西里尔文大写字母 ES
Т - 西里尔文大写字母 TE
Н - 西里尔文大写字母 EN

您需要检查您从哪里获取了这些字符,以确定它们为何如此。

当您打印一个 list 时,使用 \x.. 表示法的原因是,列表会调用其元素的 __repr__() 方法,而不是调用列表自身的 __str__() 方法,因此您会得到字符串的内部表示形式。如果您执行以下操作,您将获得类似的结果 -

print(repr(foo))

对于第一种情况。

我从一个网站上获取了字符串,进行了网页抓取。 我会查看为什么我会得到那个结果。 谢谢你的回答。 - Wonka

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接