2016-02-19 58 views
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)' 

如何解決這個問題呢?

UPDATE:

迭代:

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

for name in list: 
    print name 

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

但是:

list[0] 
>>> 
'StatTrak\xe2\x84\xa2 G3SG1 | The Executioner (Minimal Wear)' 
+4

什麼代碼,您使用的同時,迭代打印?我們能否看到更多的片段? – Litty

+0

我得到了相反的結果。它打印罰款,當我打印一個一個和unicode錯誤,當我打印整個列表 –

+0

我有@Pardoido相同的結果你必須告訴我們你的代碼來解決這個問題。 –

回答

7

沒有與你的情況沒有問題,我想你只需要一點點澄清。但首先,你有2個錯別字我會愛你糾正:

  1. list[2],而不是list[0]
  2. a[0]print a[0]

,而不是當你鍵入list[2]直接,你會得到這樣的輸出:

'StatTrak\xe2\x84\xa2 G3SG1 | The Executioner (Minimal Wear)'

T帽子是因爲:

list[2] + 輸入↔ list[2].__repr__() + 輸入

我的意思是你得到的UTF-8表示list[2]。需要注意的是Python的回升,從它已經從開始的環境,您可以檢查此UTF-8表示通過鍵入:

>>> import sys 
>>> print sys.stdout.encoding 
UTF-8 

但如果你鍵入print list[2]你:

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

這是因爲當你用bystring調用print時,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 
™ 
>>>