2016-11-01 2 views
0

Ich habe eine Liste mit Sonderzeichen erstellt. Als ich jedoch diese Listen druckte, erschienen einige Fehler im Codec.Codec Python-Liste

#!/usr/bin/env python 
#-*- coding: utf-8 -*- 

#My lists 
geometriaAproximada = ['Sim', 'Não']; 
regime = ['Permanente', 'Permanente com grande variação', 'Temporário', 
       'Temporário com leito permanente', 'Seco']; 
tipomassadagua = ['Oceano', 'Baía', 'Enseada', 'Meandro abandonado', 
          'Lago/Lagoa', 'Represa/Açude', 'Desconhecida']; 
vegetacao_nivel_1 = ['Manguezal', 'Restinga', 'Brejo Litoraneo', 'Mussununga', 
           'Vegetação com influência fluvial e/ou lacustre', 'Compo Rupestre' 
           'Floresta Estacional', 'Cerrado', 'Caatinga', 'Áreas Antropizadas', 
           'Rios, Lagos, Lagoas, e Corpos d''água']; 
vegetacao_nivel_2 = ['Arbustiva/Arbórea', 'Apicum', 'Herbáceo-Arbustivo', 'Arbustiva', 'Herbácea', 
           'Terras baixas', 'Aluvial' 'de Altitude (Submontana ou Montana)', 'Decidual', 'Semidecidual' 
           'Tipo biogeográfico de Cerrado', 'Tipo biogeográfico de Caatinga']; 
vegetacao_nivel_3 = ['Estágio secundário inicial de regeneração', 
           'Estágio secundário médio de regeneração', 
           'Estágio primário e/ou secundário avançado de regeneração', 
           'Mata de Cipó', 'Terras baixas', 'de Altitude (Submontana/Montana)', 'Aluvial', 
           'Florestado (Cerradão)', 'Arborizado (Stricto sensu)', 'Parque (Campo cerrado)', 'Campo Limpo', 
           'Vereda', 'Floresta de galeria', 
           'Florestada', 'Arborizada', 'Parque', 'Gramínio-lenhosa']; 

Wenn ich gedruckt jemand von ihnen:

print regime 

['Permanente', 'Permanente com grande varia\xc3\xa7\xc3\xa3o', 'Tempor\xc3\xa1rio', 'Tempor\xc3\xa1rio com leito permanente', 'Seco'] 

Was kann ich tun, um es zu korrigieren?

+0

Wie wäre es, die meisten Beispiele herauszuziehen und sich auf eine kurze Liste zu konzentrieren? – tdelaney

+1

Duplizieren? http://stackoverflow.com/questions/3597480/how-to-make-python-3-print-utf8#3603160 oder für 2.7: http://stackoverflow.com/questions/5203105/printing-a-utf-8 -encoded-string – kabanus

+0

'print' kann nur Text drucken. Wenn Sie etwas anderes geben, dann versuchen Sie, es in ** unzweideutige ** Zeichenfolge umzuwandeln - zum Beispiel, wenn es eine Liste ist, fügt es '[' '' '' '', Kontingentmarken (für Zeichenfolgen) hinzu und verwendet Hex-Codes für native Zeichen zeigen Ihnen, welche exacly Kodierung verwendet wurde - also ist es kein Fehler, sondern absichtliche Handlung. Wenn Sie korrekten Text benötigen, müssen Sie die Liste selbst in eine Zeichenfolge umwandeln. – furas

Antwort

0

Unicode wurde auf Python 2 verschraubt, nachdem die Sprache gekocht war. Das Objekt str kann insbesondere binär codierte Daten oder ASCII-String-Daten enthalten und Sie müssen nur irgendwie wissen, welches in Ihrem Programm ist. Der Typ unicode wurde später hinzugefügt und erfüllt alle Erwartungen - er enthält breite Textzeichen, mit denen der Unicode-Code festgelegt werden kann.

Um Verwirrung zu vermeiden, unterstützen Ihre Konsolen- und Texteditoren wahrscheinlich utf-8 nativ, so dass ein String, der codierte utf-8 Oktette enthält, richtig aussehen kann, wenn Sie ihn ansehen. Diese beiden Strings sehen gleich aus, aber repr zeigt uns, dass sie unterschiedlich sind. Die ersten Bedürfnisse Dekodieren eines Python Unicode-String wird durch das Schreiben der Strings als Unicode zu beginnen mit

>>> s = 'Permanente com grande variação' 
>>> u = u'Permanente com grande variação' 
>>> print repr(s) 
'Permanente com grande varia\xc3\xa7\xc3\xa3o' 
>>> print repr(u) 
u'Permanente com grande varia\xe7\xe3o' 
>>> s_decode = s.decode('utf-8') 
>>> print repr(s_decode) 
u'Permanente com grande varia\xe7\xe3o' 

So, der erste Teil des Problems gelöst werden.

u'Permanente com grande variação' 

Das zweite Problem ist, dass, wenn Sie eine Liste drucken, wird Python die repr seiner Mitglieder und die Saiten-Codierung Zeichen gedruckt werden noch zeigen. Das muss nicht repariert werden - das ist die normale Art, wie Python Listen druckt. Wenn Sie etwas aufgeräumter wollen, müssen Sie Ihre eigene Ausgabe als in

>>> mylist = [u'Permanente com grande variação', u'Vegetação com influência'] 
>>> print mylist 
[u'Permanente com grande varia\xe7\xe3o', u'Vegeta\xe7\xe3o com influ\xeancia'] 
>>> print u', '.join(mylist) 
Permanente com grande variação, Vegetação com influência 

Schließlich bauen, Python 3 wurde für eine sehr lange Zeit und Nicht-Englisch-Lautsprecher sollten besonders gerne gewesen, dass seine ganze Arbeit geleistet Arbeit mit internationalen Zeichensätzen.

Python ist tot ... es lebe Python!

+0

Perfekt, danke! – dogosousa

Verwandte Themen