Erstens, als eine Strategie, würde ich einen kleinen Teil Ihres Programms nehmen und versuchen, es zu portieren. Die Anzahl der unicode
Aufrufe, die Sie beschreiben, legt nahe, dass Ihre Anwendung mehr Wert auf String-Darstellungen legt als die meisten anderen, und jeder Anwendungsfall ist oft anders.
Die wichtige Überlegung ist, dass alle Zeichenfolgen Unicode in Python 3 sind. Wenn Sie den Typ str
zum Speichern von "Bytes" verwenden (z. B. wenn sie aus einer Datei gelesen werden), sollten Sie beachten, dass diese in Python3 keine Bytes sind, sondern zunächst Unicode-Zeichen sind.
Schauen wir uns ein paar Fälle an.
Erstens, wenn Sie überhaupt keine Nicht-ASCII-Zeichen haben und den Unicode-Zeichensatz wirklich nicht verwenden, ist es einfach. Wahrscheinlich können Sie einfach die unicode()
Funktion zu str()
ändern. Dadurch wird sichergestellt, dass jedes Objekt, das als Argument übergeben wird, ordnungsgemäß konvertiert wird. Es ist jedoch Wunschdenken anzunehmen, dass es so einfach ist.
Am wahrscheinlichsten müssen Sie das Argument zu unicode()
betrachten, um zu sehen, was es ist, und bestimmen, wie man es behandelt.
Zum Beispiel, wenn Sie UTF-8-Zeichen aus einer Datei in Python lesen 2 und deren Umwandlung Code in Unicode würden wie folgt aussehen:
data = open('somefile', 'r').read()
udata = unicode(data)
jedoch in Python3, read()
gibt Unicode-Daten zunächst einmal, und die Unicode-Dekodierung muss angegeben werden, beim Öffnen der Datei:
udata = open('somefile', 'r', encoding='UTF-8').read()
wie Sie sehen können, unicode()
einfach transformieren, wenn die Portierung abhängen kann sich stark auf, wie und warum die Anwendung Unicode convers tut Ionen, woher die Daten stammen und wohin sie gehen.
Python3 bringt mehr Klarheit in String-Repräsentationen, was zwar willkommen ist, aber Porting entmutigend machen kann. Zum Beispiel hat Python3 einen richtigen bytes
Typen, und Sie konvertieren Byte-Daten wie folgt Unicode:
udata = bytedata.decode('UTF-8')
oder Unicode-Daten in Zeichenform umwandeln das Gegenteil verwandeln werden.
bytedata = udata.encode('UTF-8')
Ich hoffe, dass dies zumindest hilft, eine Strategie zu bestimmen.
https://docs.python.org/3/howto/pyporting.html – vaultah
@vaultah dies ist nicht eine allgemeine Frage. Es geht nur um 'unicode()' Aufrufe. Ich bin die Codebasis, an der ich gerade arbeite, es gibt ca. 700 Aufrufe zu dieser Methode. Was soll ich machen? – guettli
Es gibt keine gute Antwort auf diese Frage. Wenn Sie Glück haben, können Sie einfach die Anrufe zu "Unicode" entfernen und Sie sind gut zu gehen. Alle Strings sind Unicode in Python 3. Wenn das nicht funktioniert, dann erwarte * viele * Arbeit. Der Übergang von Str zu Unicode Literalen und Bytes ist bei weitem die inkompatibelste Änderung, wenn man von Python 2 auf 3 umschaltet. – Phillip