2017-11-28 1 views
1

Ich möchte String-Werte zu utf-8 dekodieren. Aber es ändert sich nicht. So , hier ist mein Code:String Wert decode utf-8

self.textEdit_3.append(str(self.new_header).decode("utf-8") + "\n") 

Das Ergebnisbild ist hier:

enter image description here

Der ursprüngliche Ausgangswert:

['matchkey', 'a', 'b', 'd', '안녕'] # 안녕 is Korean Language 

Ich habe die Standard-Kodierung für die Codierung/Dekodierung mit Unicode zu utf-8 statt ascii. In der ersten Zeile habe ich diesen Code hinzugefügt:

import sys 
reload(sys) 
sys.setdefaultencoding('utf-8') 

Warum ändert sich der String-Wert nicht?

enter image description here

Antwort

1

Sie können Ihren Code wie folgt beheben:

header = str(self.new_header).decode('string-escape').decode("utf-8") 
self.textEdit_3.append(header + "\n") 

Sie die setdefaultencoding Linien nicht brauchen.


Expanantion:

Der ursprüngliche Wert ist eine Liste mit Byte-Strings:

>>> value = ['matchkey', 'a', 'b', 'd', '안녕'] 
>>> value 
['matchkey', 'a', 'b', 'd', '\xec\x95\x88\xeb\x85\x95'] 

Wenn Sie diese Liste mit str konvertieren, wird es repr auf alle Listenelemente verwenden :

>>> strvalue = str(value) 
>>> strvalue 
"['matchkey', 'a', 'b', 'd', '\\xec\\x95\\x88\\xeb\\x85\\x95']" 

Die repr Teile können wie folgt decodiert werden:

>>> strvalue = strvalue.decode('string-escape') 
>>> strvalue 
"['matchkey', 'a', 'b', 'd', '\xec\x95\x88\xeb\x85\x95']" 

und dies kann jetzt decodiert werden wie folgt Unicode:

>>> univalue = strvalue.decode('utf-8') 
>>> univalue 
u"['matchkey', 'a', 'b', 'd', '\uc548\ub155']" 
>>> print univalue 
['matchkey', 'a', 'b', 'd', '안녕'] 

PS:

Im Hinblick auf die Probleme beim Lesen Dateien mit einem utf-8, bitte testen Sie dieses Skript:

# -*- coding: utf-8 -*- 

import os, codecs, tempfile 

text = u'a,b,d,안녕' 
data = text.encode('utf-8-sig') 

print 'text:', repr(text), len(text) 
print 'data:', repr(data), len(data) 

f, path = tempfile.mkstemp() 
print 'write:', os.write(f, data) 
os.close(f) 

with codecs.open(path, 'r', encoding='utf-8-sig') as f: 
    string = f.read() 
    print 'read:', repr(string), len(string), string == text 
+0

Kommentare sind nicht für längere Diskussion; Diese Konversation wurde [in den Chat verschoben] (http://chat.stackoverflow.com/rooms/160658/discussion-on-answer-by-ekhumoro-string-value-decode-utf-8). –