如何打印奇怪的字符串字符?

3

我有一个包含名称的列表。其中一些名称包含像★或™这样的奇怪字符。当我遍历列表时,它打印得很好:

★ StatTrak™ Huntsman Knife | Safari Mesh (Battle-Scarred)
Souvenir USP-S | Night Ops (Well-Worn)
StatTrak™ G3SG1 | The Executioner (Minimal Wear)

然而,当我尝试逐个打印时:
print a[0]
'\xe2\x98\x85 StatTrak\xe2\x84\xa2 Huntsman Knife | Safari Mesh (Battle-Scarred)'

如何解决这个问题?

更新:

迭代:

list = ['★ StatTrakHuntsman Knife | Safari Mesh (Battle-Scarred)',
'Souvenir USP-S | Night Ops (Well-Worn)',
'StatTrakG3SG1 | The Executioner (Minimal Wear)']

for name in list:
    print name

>>> 
★ StatTrakHuntsman Knife | Safari Mesh (Battle-Scarred)
Souvenir USP-S | Night Ops (Well-Worn)
StatTrakG3SG1 | The Executioner (Minimal Wear)

然而:
list[0]
>>> 
'StatTrak\xe2\x84\xa2 G3SG1 | The Executioner (Minimal Wear)'

4
你在迭代时使用的是哪种代码来打印输出?我们能看到更多代码片段吗? - Litty
我得到了相反的结果。当我逐个打印并且整个列表打印时出现Unicode错误。 - dot.Py
我得到了和 @Pardoido 相同的结果,你需要向我们展示你的代码来解决这个问题。 - Tony Babarino
已更新,添加了代码示例。 - Irmantas Želionis
我不太确定您的期望是什么。这就是字符串存储的方式,当您执行list[0]时,它将显示带有特殊符号代码的字符串,具体取决于字符串编码,当您运行print list[0]时,它会将这些代码用确切的符号替换。 - Tony Babarino
有任何解决方案吗? - Irmantas Želionis
1个回答

7
您的情况没有问题,我认为您只需要一点澄清。但首先,您有两个拼写错误需要纠正:
1. 使用 `list[2]` 而不是 `list[0]`。 2. 使用 `a[0]` 而不是 `print a[0]`。
当您直接输入 `list[2]` 时,会得到以下输出:
'StatTrak™ G3SG1 | The Executioner (Minimal Wear)'
这是因为:
`list[2] + Enter` ↔ `list[2].__repr__() + Enter`
我是说您会得到 `list[2]` 的 UTF-8 表示形式。请注意,Python 从其启动的环境中选择此 UTF-8 表示形式,您可以通过键入以下内容来检查它:
>>> import sys
>>> print sys.stdout.encoding
UTF-8

但如果你输入 print list[2],你会得到:

>>> print list[2]
StatTrak™ G3SG1 | The Executioner (Minimal Wear)
>>> 

这是因为当你使用print和一个bystring时,Python会先将其转换为unicode。我的意思是:
print list[2]

(等同于)

print b"'StatTrak\xe2\x84\xa2 G3SG1 | The Executioner (Minimal Wear)'".decode('utf-8')

演示:

>>> print b"'StatTrak\xe2\x84\xa2 G3SG1 | The Executioner (Minimal Wear)'".decode('utf-8')
'StatTrak™ G3SG1 | The Executioner (Minimal Wear)'
>>> 

简单来说:

>>> a='★ '
>>> b='™'
>>> a
'\xe2\x98\x85 '
>>> b
'\xe2\x84\xa2'
>>> print b"'\xe2\x98\x85 '".decode('utf-8')
'★ '
>>> print b"'\xe2\x84\xa2'".decode('utf-8')
'™'
>>> print a
★ 
>>> print b
™
>>> 

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