2016-08-20 5 views
1

Ich habe eine Liste von Tupeln aus einer MySQL-Datenbank erhalten.
Wenn ich versuche, einen Artikel zu drucken, hier ist das Ergebnis:Python: decode russische string

Далоев ÐлекÑандр 
<class 'str'> 

Dies ist CP1251, nach https://2cyr.com/decode/?lang=ru

Ich habe viele Variationen von .encode().decode() mit errors='ignore' params versucht, aber ohne Erfolg. Irgendwelche Ideen?

UPD Ich erhalte meine Liste der Tupel mit mysql-connector-python.

z ist die Liste. Das Ergebnis ist von oben z[0][0]

def select_name(add): 
z = [] 
try: 
    dbconfig = read_db_config() 
    conn = MySQLConnection(**dbconfig) 
    cursor = conn.cursor() 
    cursor.execute("select name from phone_add where ph_add = " + str(add) + ";") 

    row = cursor.fetchone() 
    while row is not None: 
     z.append(row) 
     row = cursor.fetchone() 
    return z 

except Error as e: 
    print(e) 

finally: 
    cursor.close() 
    conn.close() 

Upd2 hier ein wierd Decoder ist. Hoffe, es wird helfen, smb.

Ich erkannte, dass das Problem in das Einfügen in meine DB ist. Will hier graben.

q = string 

codings = ['latin1', 'utf8', 'cp1251', 'unicode-escape', 'cp866'] 
exceptions = ['ignore', 'strict', 'xmlcharrefreplace', 'backslashreplace'] 
for i in codings: 
    for j in codings: 
     for z in exceptions: 
      for p in exceptions: 
       try: 
        print(q.encode(i, errors=z).decode(j, errors=p) + '<------' + i + ' ' + j + ' ' + z + ' ' + p) 
       except: 
        pass 
+0

Bitte zeigen Sie den Code, der das erzeugt hat. – wallyk

+1

Ich bin nicht so sicher über Ihre Schlussfolgerung "das ist CP1251". Wenn ich dieselbe Webseite verwende, kann ich sie in einer Vielzahl von Codierungen anzeigen, aber keine von ihnen ergibt einen vollständig lesbaren "russischen" Text. – usr2564301

+0

Ich weiß nicht, wie es passiert. Aber nach dem Kopieren dieser Zeichenfolge ändert sich das irgendwie, also kann ich es auf dieser Website nicht verwenden. Sehr interessant – Snobby

Antwort

0

Das Problem lag in der Datenbank. Der Stich wurde bereits beim Einsetzen beschädigt. Ich versuchte mysql_set_charset('utf8'); in meinem Insertion-Skript und alles ging gut.