ich diesen Code Teil einer Funktion, die schlecht fremde Zeichen aus einem String codiert Replace:Python 3.4: str: Attribute: ‚str‘ Objekt hat kein Attribut ‚dekodieren
s = "String from an old database with weird mixed encodings"
s = str(bytes(odbc_str.strip(), 'cp1252'))
s = s.replace('\\x82', 'é')
s = s.replace('\\x8a', 'è')
(...)
print(s)
# b"String from an old database with weird mixed encodings"
Ich brauche hier ein„echten "Zeichenfolge, keine Bytes. Aber whend ich sie entschlüsseln will, muss ich eine Ausnahme:
s = "String from an old database with weird mixed encodings"
s = str(bytes(odbc_str.strip(), 'cp1252'))
s = s.replace('\\x82', 'é')
s = s.replace('\\x8a', 'è')
(...)
print(s.decode("utf-8"))
# AttributeError: 'str' object has no attribute 'decode'
- Wissen Sie, warum s Bytes hier ist?
- Warum kann ich es nicht zu einer echten Zeichenfolge dekodieren?
- Wissen Sie, wie man es sauber macht? (heute sende ich zurück [2:] [: - 1]. Arbeiten aber sehr hässlich, und ich möchte dieses Verhalten verstehen)
Vielen Dank im Voraus!
EDIT:
pypyodbc in python3 Unicode als Standard verwenden. Das hat mich verwirrt. Beim Verbinden können Sie ihm sagen, dass er ANSI verwenden soll.
con_odbc = pypyodbc.connect("DSN=GP", False, False, 0, False)
Dann kann ich die zurückgegebenen Stoffe in CP850 wandeln, die die anfängliche Codepage der Datenbank vorhanden ist.
str(odbc_str, "cp850", "replace")
Keine Notwendigkeit mehr manuell die jedes Sonderzeichen ersetzen. Vielen Dank pepr
'str.decode' existiert nicht mehr in 3.x. Siehe https://docs.python.org/3/howto/unicode.html für den Umgang mit Strings und Bytes in 3.x – jonrsharpe
'decode' dient zum Konvertieren von Bytes in abstrakte Zeichen, die den String bilden. Die Zeichenfolge in Python 3 enthält nur gültige Zeichen. Dies ist der Grund dafür, dass ".decode" nicht vorhanden ist - es gibt keine Bytes in einer Python 3-Zeichenfolge. – pepr