2015-08-14 4 views
6

Il mio problema StringPython 2.7 - Perché python codifica una stringa quando .append() in una lista?

# -*- 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()) 

risultato di stampa:

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

Questo funziona bene, ho solo scrivere la stringa "CT142H.0000" a mano tiping con tastiera (suo lo stesso codice)

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()) 

risultato di stampa:

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

Perché python codifica la prima stringa quando la aggiungo in un elenco?

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

Questo è attualmente risolto, ero preoccupato per questo chars, ho messo il "risultato" in JSON e poi in un sito web, finalmente nel sito funziona!

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

Ho trovato un'altra soluzione, ma nessuna è la soluzione corretta, in alcuni casi si avranno problemi.

json.dumps(list, ensure_ascii=False) 

Grazie per tutto!

risposta

11

Perché anche se sembrano normali, C/T/H caratteri in realtà non sono quei caratteri.

Sono caratteri cirillici.

С - Cyrillic Capital letter ES
Т - Cyrillic Capital letter TE
Н - Cyrillic Capital letter EN

Si avrebbe bisogno di controllare dove si sono presi quei personaggi da, sul perché sono così.

Sul perché hanno ottenuto stampate con il \x.. rappresentazione, è perché quando si stampa un list, il metodo __str__() nella lista si chiama, ma lista stessa chiama __repr__() sui suoi elementi, e quindi si ottiene la rappresentazione interna delle stringhe. Otterresti risultati simili se lo facessi -

print(repr(foo)) 

per il primo caso.

+0

Ottengo la stringa da un sito Web, eseguendo il web scraping. Cercherò perché lo ottengo. Grazie per la tua risposta, – Wonka