Unicode-Objekte und Codecs¶
Unicode-Objekte¶
Seit der Implementierung von PEP 393 in Python 3.3 verwenden Unicode-Objekte intern verschiedene Darstellungen, um den vollständigen Bereich von Unicode-Zeichen zu handhaben und gleichzeitig speichereffizient zu bleiben. Es gibt Sonderfälle für Zeichenketten, bei denen alle Codepunkte kleiner als 128, 256 oder 65536 sind; andernfalls müssen die Codepunkte kleiner als 1114112 sein (was dem vollen Unicode-Bereich entspricht).
Die UTF-8-Darstellung wird bei Bedarf erstellt und im Unicode-Objekt zwischengespeichert.
Hinweis
Die Py_UNICODE-Darstellung wurde seit Python 3.12 mit veralteten APIs entfernt. Weitere Informationen finden Sie in PEP 623.
Unicode-Typ¶
Dies sind die grundlegenden Unicode-Objekttypen, die für die Unicode-Implementierung in Python verwendet werden.
-
PyTypeObject PyUnicode_Type¶
- Teil der Stable ABI.
Diese Instanz von
PyTypeObjectrepräsentiert den Python-Unicode-Typ. Sie wird für Python-Code alsstrverfügbar gemacht.
-
PyTypeObject PyUnicodeIter_Type¶
- Teil der Stable ABI.
Diese Instanz von
PyTypeObjectrepräsentiert den Python-Unicode-Iterator-Typ. Sie wird verwendet, um über Unicode-Zeichenkettenobjekte zu iterieren.
-
type Py_UCS4¶
-
type Py_UCS2¶
-
type Py_UCS1¶
- Teil der Stable ABI.
Diese Typen sind Typedefs für vorzeichenlose Ganzzahltypen, die breit genug sind, um Zeichen mit 32, 16 und 8 Bits zu enthalten. Bei der Arbeit mit einzelnen Unicode-Zeichen sollte
Py_UCS4verwendet werden.Hinzugefügt in Version 3.3.
-
type PyASCIIObject¶
-
type PyCompactUnicodeObject¶
-
type PyUnicodeObject¶
Diese Untertypen von
PyObjectrepräsentieren ein Python-Unicode-Objekt. In fast allen Fällen sollten sie nicht direkt verwendet werden, da alle API-Funktionen, die mit Unicode-Objekten arbeiten,PyObject-Zeiger als Eingabe und Ausgabe nehmen.Hinzugefügt in Version 3.3.
Die folgenden APIs sind C-Makros und statische Inline-Funktionen für schnelle Prüfungen und den Zugriff auf interne schreibgeschützte Daten von Unicode-Objekten.
-
int PyUnicode_Check(PyObject *obj)¶
Gibt wahr zurück, wenn das Objekt obj ein Unicode-Objekt oder eine Instanz eines Unicode-Subtyps ist. Diese Funktion ist immer erfolgreich.
-
int PyUnicode_CheckExact(PyObject *obj)¶
Gibt wahr zurück, wenn das Objekt obj ein Unicode-Objekt, aber keine Instanz eines Subtyps ist. Diese Funktion ist immer erfolgreich.
-
Py_ssize_t PyUnicode_GET_LENGTH(PyObject *unicode)¶
Gibt die Länge der Unicode-Zeichenkette in Codepunkten zurück. unicode muss ein Unicode-Objekt in der "kanonischen" Darstellung sein (nicht geprüft).
Hinzugefügt in Version 3.3.
-
Py_UCS1 *PyUnicode_1BYTE_DATA(PyObject *unicode)¶
-
Py_UCS2 *PyUnicode_2BYTE_DATA(PyObject *unicode)¶
-
Py_UCS4 *PyUnicode_4BYTE_DATA(PyObject *unicode)¶
Gibt einen Zeiger auf die kanonische Darstellung zurück, der in UCS1-, UCS2- oder UCS4-Ganzzahltypen für direkten Zeichenzugriff umgewandelt wurde. Es werden keine Prüfungen durchgeführt, ob die kanonische Darstellung die korrekte Zeichengröße hat; verwenden Sie
PyUnicode_KIND(), um die richtige Funktion auszuwählen.Hinzugefügt in Version 3.3.
-
PyUnicode_1BYTE_KIND¶
-
PyUnicode_2BYTE_KIND¶
-
PyUnicode_4BYTE_KIND¶
Rückgabewerte des Makros
PyUnicode_KIND().Hinzugefügt in Version 3.3.
Geändert in Version 3.12:
PyUnicode_WCHAR_KINDwurde entfernt.
-
int PyUnicode_KIND(PyObject *unicode)¶
Gibt eine der PyUnicode-Konstanten (siehe oben) zurück, die angeben, wie viele Bytes pro Zeichen dieses Unicode-Objekt zur Speicherung seiner Daten verwendet. unicode muss ein Unicode-Objekt in der "kanonischen" Darstellung sein (nicht geprüft).
Hinzugefügt in Version 3.3.
-
void *PyUnicode_DATA(PyObject *unicode)¶
Gibt einen Zeiger vom Typ `void` auf den rohen Unicode-Puffer zurück. unicode muss ein Unicode-Objekt in der "kanonischen" Darstellung sein (nicht geprüft).
Hinzugefügt in Version 3.3.
-
void PyUnicode_WRITE(int kind, void *data, Py_ssize_t index, Py_UCS4 value)¶
Schreibt den Codepunkt value an den angegebenen nullbasierten index in einer Zeichenkette.
Der kind-Wert und der data-Zeiger müssen aus einer Zeichenkette mit
PyUnicode_KIND()undPyUnicode_DATA()abgerufen worden sein. Sie müssen eine Referenz auf diese Zeichenkette halten, während SiePyUnicode_WRITE()aufrufen. Alle Anforderungen vonPyUnicode_WriteChar()gelten ebenfalls.Die Funktion führt keine Prüfungen für ihre Anforderungen durch und ist für die Verwendung in Schleifen vorgesehen.
Hinzugefügt in Version 3.3.
-
Py_UCS4 PyUnicode_READ(int kind, void *data, Py_ssize_t index)¶
Liest einen Codepunkt aus einer kanonischen Darstellung data (wie mit
PyUnicode_DATA()erhalten). Es werden keine Prüfungen oder Bereitschaftsabrufe durchgeführt.Hinzugefügt in Version 3.3.
-
Py_UCS4 PyUnicode_READ_CHAR(PyObject *unicode, Py_ssize_t index)¶
Liest ein Zeichen aus einem Unicode-Objekt unicode, das in der "kanonischen" Darstellung vorliegen muss. Dies ist weniger effizient als
PyUnicode_READ(), wenn Sie mehrere aufeinanderfolgende Lesevorgänge durchführen.Hinzugefügt in Version 3.3.
-
Py_UCS4 PyUnicode_MAX_CHAR_VALUE(PyObject *unicode)¶
Gibt den maximalen Codepunkt zurück, der geeignet ist, eine weitere Zeichenkette basierend auf unicode zu erstellen, welche in der "kanonischen" Darstellung vorliegen muss. Dies ist immer eine Annäherung, aber effizienter als das Iterieren über die Zeichenkette.
Hinzugefügt in Version 3.3.
-
int PyUnicode_IsIdentifier(PyObject *unicode)¶
- Teil der Stable ABI.
Gibt
1zurück, wenn die Zeichenkette ein gültiger Bezeichner gemäß der Sprachdefinition ist, Abschnitt Namen (Bezeichner und Schlüsselwörter). Gibt andernfalls0zurück.Geändert in Version 3.9: Die Funktion ruft
Py_FatalError()nicht mehr auf, wenn die Zeichenkette nicht bereit ist.
-
unsigned int PyUnicode_IS_ASCII(PyObject *unicode)¶
Gibt wahr zurück, wenn die Zeichenkette nur ASCII-Zeichen enthält. Entspricht
str.isascii().Hinzugefügt in Version 3.2.
Unicode-Zeicheneigenschaften¶
Unicode bietet viele verschiedene Zeicheneigenschaften. Die am häufigsten benötigten sind über diese Makros verfügbar, die je nach Python-Konfiguration auf C-Funktionen abgebildet werden.
-
int Py_UNICODE_ISLINEBREAK(Py_UCS4 ch)¶
Gibt
1oder0zurück, je nachdem, ob ch ein Zeilenumbruchzeichen ist.
-
int Py_UNICODE_ISNUMERIC(Py_UCS4 ch)¶
Gibt
1oder0zurück, je nachdem, ob ch eine numerische Zeichen ist.
-
int Py_UNICODE_ISALNUM(Py_UCS4 ch)¶
Gibt
1oder0zurück, je nachdem, ob ch ein alphanumerisches Zeichen ist.
-
int Py_UNICODE_ISPRINTABLE(Py_UCS4 ch)¶
Gibt
1oder0zurück, je nachdem, ob ch ein druckbares Zeichen im Sinne vonstr.isprintable()ist.
Diese APIs können für schnelle direkte Zeichenkonvertierungen verwendet werden.
-
int Py_UNICODE_TODECIMAL(Py_UCS4 ch)¶
Gibt das Zeichen ch in eine positive Dezimalzahl konvertiert zurück. Gibt
-1zurück, wenn dies nicht möglich ist. Diese Funktion löst keine Ausnahmen aus.
-
int Py_UNICODE_TODIGIT(Py_UCS4 ch)¶
Gibt das Zeichen ch in eine einzelne Ziffer konvertiert zurück. Gibt
-1zurück, wenn dies nicht möglich ist. Diese Funktion löst keine Ausnahmen aus.
-
double Py_UNICODE_TONUMERIC(Py_UCS4 ch)¶
Gibt das Zeichen ch in eine Gleitkommazahl konvertiert zurück. Gibt
-1.0zurück, wenn dies nicht möglich ist. Diese Funktion löst keine Ausnahmen aus.
Diese APIs können zur Arbeit mit Surrogaten verwendet werden.
-
int Py_UNICODE_IS_HIGH_SURROGATE(Py_UCS4 ch)¶
Prüft, ob ch ein hohes Surrogat ist (
0xD800 <= ch <= 0xDBFF).
-
int Py_UNICODE_IS_LOW_SURROGATE(Py_UCS4 ch)¶
Prüft, ob ch ein tiefes Surrogat ist (
0xDC00 <= ch <= 0xDFFF).
-
Py_UCS4 Py_UNICODE_JOIN_SURROGATES(Py_UCS4 high, Py_UCS4 low)¶
Verknüpft zwei Surrogat-Codepunkte und gibt einen einzelnen
Py_UCS4-Wert zurück. high und low sind jeweils das führende und nachfolgende Surrogat in einem Surrogatpaar. high muss im Bereich [0xD800; 0xDBFF] und low muss im Bereich [0xDC00; 0xDFFF] liegen.
Erstellen und Zugreifen auf Unicode-Zeichenketten¶
Um Unicode-Objekte zu erstellen und auf ihre grundlegenden Sequenzeigenschaften zuzugreifen, verwenden Sie diese APIs.
-
PyObject *PyUnicode_New(Py_ssize_t size, Py_UCS4 maxchar)¶
- Rückgabewert: Neue Referenz.
Erstellt ein neues Unicode-Objekt. maxchar sollte der tatsächliche maximale Codepunkt sein, der in die Zeichenkette eingefügt werden soll. Als Annäherung kann er auf den nächsten Wert in der Sequenz 127, 255, 65535, 1114111 aufgerundet werden.
Bei einem Fehler wird eine Ausnahme gesetzt und
NULLzurückgegeben.Nach der Erstellung kann die Zeichenkette mit
PyUnicode_WriteChar(),PyUnicode_CopyCharacters(),PyUnicode_Fill(),PyUnicode_WRITE()oder ähnlichem gefüllt werden. Da Zeichenketten unveränderlich sein sollen, achten Sie darauf, das Ergebnis nicht zu "verwenden", während es modifiziert wird. Insbesondere bevor es mit seinen endgültigen Inhalten gefüllt ist, muss eine Zeichenkette:darf nicht gehasht werden,
darf nicht zu UTF-8 oder einer anderen nicht-"kanonischen" Darstellung
konvertiert werden,darf ihre Referenzanzahl nicht geändert werden,
darf nicht mit Code geteilt werden, der eines der oben genannten tun könnte.
Diese Liste ist nicht vollständig. Es liegt in Ihrer Verantwortung, diese Verwendungszwecke zu vermeiden; Python prüft diese Anforderungen nicht immer.
Um zu vermeiden, dass versehentlich ein teilweise geschriebenes String-Objekt preisgegeben wird, verwenden Sie vorzugsweise die API
PyUnicodeWriteroder eine der unten aufgeführtenPyUnicode_From*Funktionen.Hinzugefügt in Version 3.3.
-
PyObject *PyUnicode_FromKindAndData(int kind, const void *buffer, Py_ssize_t size)¶
- Rückgabewert: Neue Referenz.
Erstellt ein neues Unicode-Objekt mit der angegebenen kind (mögliche Werte sind
PyUnicode_1BYTE_KINDusw., wie vonPyUnicode_KIND()zurückgegeben). Der buffer muss auf ein Array von size Einheiten mit 1, 2 oder 4 Bytes pro Zeichen zeigen, wie durch die Art vorgegeben.Falls erforderlich, wird der Eingabe-buffer kopiert und in die kanonische Darstellung umgewandelt. Wenn der buffer beispielsweise ein UCS4-String ist (
PyUnicode_4BYTE_KIND) und nur Codepunkte im UCS1-Bereich enthält, wird er in UCS1 (PyUnicode_1BYTE_KIND) umgewandelt.Hinzugefügt in Version 3.3.
-
PyObject *PyUnicode_FromStringAndSize(const char *str, Py_ssize_t size)¶
- Rückgabewert: Neue Referenz. Teil der Stabilen ABI.
Erstellt ein Unicode-Objekt aus dem char-Puffer str. Die Bytes werden als UTF-8-kodiert interpretiert. Der Puffer wird in das neue Objekt kopiert. Der Rückgabewert kann ein geteiltes Objekt sein, d. h. eine Modifikation der Daten ist nicht erlaubt.
Diese Funktion löst
SystemErroraus, wennsize < 0,
str ist
NULLund size > 0
Geändert in Version 3.12: str ==
NULLmit size > 0 ist nicht mehr erlaubt.
-
PyObject *PyUnicode_FromString(const char *str)¶
- Rückgabewert: Neue Referenz. Teil der Stabilen ABI.
Erstellt ein Unicode-Objekt aus einem UTF-8-kodierten, nullterminierten char-Puffer str.
-
PyObject *PyUnicode_FromFormat(const char *format, ...)¶
- Rückgabewert: Neue Referenz. Teil der Stabilen ABI.
Nimmt einen C
printf()-ähnlichen format-String und eine variable Anzahl von Argumenten, berechnet die Größe des resultierenden Python-Unicode-Strings und gibt einen String mit den formatierten Werten zurück. Die variablen Argumente müssen C-Typen sein und exakt den Formatzeichen im ASCII-kodierten format-String entsprechen.Ein Konvertierungsspezifizierer besteht aus zwei oder mehr Zeichen und hat folgende Komponenten, die in dieser Reihenfolge auftreten müssen:
Das Zeichen
'%', das den Beginn des Spezifizierers markiert.Konvertierungsflags (optional), die das Ergebnis einiger Konvertierungstypen beeinflussen.
Mindestfeldbreite (optional). Wenn als
'*'(Sternchen) angegeben, wird die tatsächliche Breite im nächsten Argument angegeben, das vom Typ int sein muss, und das zu konvertierende Objekt kommt nach der Mindestfeldbreite und der optionalen Präzision.Präzision (optional), angegeben als ein
'.'(Punkt) gefolgt von der Präzision. Wenn als'*'(ein Sternchen) angegeben, wird die tatsächliche Präzision im nächsten Argument angegeben, das vom Typ int sein muss, und der zu konvertierende Wert kommt nach der Präzision.Längenmodifikator (optional).
Konvertierungstyp.
Die Konvertierungsflag-Zeichen sind
Flag
Bedeutung
0Der Wert wird für numerische Werte mit Nullen aufgefüllt.
-Der konvertierte Wert ist linksbündig ausgerichtet (überschreibt das
0-Flag, wenn beide angegeben sind).Die Längenmodifikatoren für folgende Ganzzahlkonvertierungen (
d,i,o,u,xoderX) geben den Typ des Arguments an (standardmäßig int)Modifikator
Typen
llong oder unsigned long
lllong long oder unsigned long long
jintmax_toderuintmax_tzsize_toderssize_ttptrdiff_tDer Längenmodifikator
lfür folgende KonvertierungensoderVgibt an, dass der Typ des Arguments const wchar_t* ist.Die Konvertierungsspezifizierer sind
Konvertierungsspezifizierer
Typ
Kommentar
%n/a
Das literale Zeichen
%.d,iAngegeben durch den Längenmodifikator
Die Dezimaldarstellung einer vorzeichenbehafteten C-Ganzzahl.
uAngegeben durch den Längenmodifikator
Die Dezimaldarstellung einer vorzeichenlosen C-Ganzzahl.
oAngegeben durch den Längenmodifikator
Die Oktaldarstellung einer vorzeichenlosen C-Ganzzahl.
xAngegeben durch den Längenmodifikator
Die Hexadezimaldarstellung einer vorzeichenlosen C-Ganzzahl (Kleinbuchstaben).
XAngegeben durch den Längenmodifikator
Die Hexadezimaldarstellung einer vorzeichenlosen C-Ganzzahl (Großbuchstaben).
cint
Ein einzelnes Zeichen.
sconst char* oder const wchar_t*
Ein nullterminiertes C-Zeichenarray.
pconst void*
Die Hex-Darstellung eines C-Zeigers. Weitgehend äquivalent zu
printf("%p"), außer dass garantiert wird, dass es mit dem Literal0xbeginnt, unabhängig davon, was dieprintfdes Systems liefert.ADas Ergebnis des Aufrufs von
ascii().UEin Unicode-Objekt.
VPyObject*, const char* oder const wchar_t*
Ein Unicode-Objekt (das
NULLsein kann) und ein nullterminiertes C-Zeichenarray als zweiter Parameter (das verwendet wird, wenn der erste ParameterNULList).SDas Ergebnis des Aufrufs von
PyObject_Str().RDas Ergebnis des Aufrufs von
PyObject_Repr().TRuft den vollständig qualifizierten Namen eines Objekttyps ab; ruft
PyType_GetFullyQualifiedName()auf.#TÄhnlich dem
T-Format, verwendet jedoch einen Doppelpunkt (:) als Trennzeichen zwischen dem Modulnamen und dem qualifizierten Namen.NRuft den vollständig qualifizierten Namen eines Typs ab; ruft
PyType_GetFullyQualifiedName()auf.#NÄhnlich dem
N-Format, verwendet jedoch einen Doppelpunkt (:) als Trennzeichen zwischen dem Modulnamen und dem qualifizierten Namen.Hinweis
Die Einheit der Breitenformatierung ist die Anzahl der Zeichen und nicht die Anzahl der Bytes. Die Einheit der Präzisionsformatierung ist die Anzahl der Bytes oder
wchar_t-Elemente (wenn der Längenmodifikatorlverwendet wird) für"%s"und"%V"(wenn dasPyObject*-ArgumentNULList) und eine Anzahl von Zeichen für"%A","%U","%S","%R"und"%V"(wenn dasPyObject*-Argument nichtNULList).Hinweis
Im Gegensatz zu C
printf()hat das0-Flag auch dann eine Auswirkung, wenn für Ganzzahlkonvertierungen (d,i,u,o,xoderX) eine Präzision angegeben ist.Geändert in Version 3.2: Unterstützung für
"%lld"und"%llu"hinzugefügt.Geändert in Version 3.3: Unterstützung für
"%li","%lli"und"%zi"hinzugefügt.Geändert in Version 3.4: Unterstützung für Breiten- und Präzisionsformatierer für
"%s","%A","%U","%V","%S","%R"hinzugefügt.Geändert in Version 3.12: Unterstützung für Konvertierungsspezifizierer
oundX. Unterstützung für Längenmodifikatorenjundt. Längenmodifikatoren werden nun auf alle Ganzzahlkonvertierungen angewendet. Längenmodifikatorlwird nun auf KonvertierungsspezifizierersundVangewendet. Unterstützung für variable Breiten und Präzisionen*. Unterstützung für das Flag-.Ein nicht erkannter Formatbuchstabe löst nun eine
SystemErroraus. In früheren Versionen wurde der Rest des Formatstrings unverändert in den Ergebnisstring kopiert und alle zusätzlichen Argumente verworfen.Geändert in Version 3.13: Unterstützung für die Formate
%T,%#T,%Nund%#Nhinzugefügt.
-
PyObject *PyUnicode_FromFormatV(const char *format, va_list vargs)¶
- Rückgabewert: Neue Referenz. Teil der Stabilen ABI.
Identisch mit
PyUnicode_FromFormat(), außer dass es genau zwei Argumente entgegennimmt.
-
PyObject *PyUnicode_FromObject(PyObject *obj)¶
- Rückgabewert: Neue Referenz. Teil der Stabilen ABI.
Kopiert eine Instanz eines Unicode-Subtyps in ein neues echtes Unicode-Objekt, falls erforderlich. Wenn obj bereits ein echtes Unicode-Objekt (kein Subtyp) ist, wird eine neue starke Referenz auf das Objekt zurückgegeben.
Objekte, die keine Unicode-Objekte oder deren Subtypen sind, führen zu einer
TypeError.
-
PyObject *PyUnicode_FromOrdinal(int ordinal)¶
- Rückgabewert: Neue Referenz. Teil der Stabilen ABI.
Erstellt ein Unicode-Objekt aus dem angegebenen Unicode-Codepunkt-ordinal.
Das Ordinal muss im Bereich
range(0x110000)liegen. Bei einem Verstoß wird eineValueErrorausgelöst.
-
PyObject *PyUnicode_FromEncodedObject(PyObject *obj, const char *encoding, const char *errors)¶
- Rückgabewert: Neue Referenz. Teil der Stabilen ABI.
Dekodiert ein kodiertes Objekt obj in ein Unicode-Objekt.
bytes,bytearrayund andere bytes-ähnliche Objekte werden gemäß der angegebenen encoding und unter Verwendung der von errors definierten Fehlerbehandlung dekodiert. Beides kannNULLsein, damit die Schnittstelle die Standardwerte verwendet (siehe Built-in Codecs für Details).Alle anderen Objekte, einschließlich Unicode-Objekte, führen dazu, dass eine
TypeErrorgesetzt wird.Die API gibt
NULLzurück, wenn ein Fehler aufgetreten ist. Der Aufrufer ist dafür verantwortlich, die zurückgegebenen Objekte zu decrefizieren.
-
void PyUnicode_Append(PyObject **p_left, PyObject *right)¶
- Teil der Stable ABI.
Hängt den String right an das Ende von p_left an. p_left muss auf eine starke Referenz auf ein Unicode-Objekt zeigen;
PyUnicode_Append()gibt diese Referenz frei („stiehlt“ sie).Bei einem Fehler wird *p_left auf
NULLgesetzt und eine Ausnahme ausgelöst.Bei Erfolg wird *p_left auf eine neue starke Referenz auf das Ergebnis gesetzt.
-
void PyUnicode_AppendAndDel(PyObject **p_left, PyObject *right)¶
- Teil der Stable ABI.
Die Funktion ähnelt
PyUnicode_Append(), wobei der einzige Unterschied darin besteht, dass sie die Referenzanzahl von right um eins verringert.
-
PyObject *PyUnicode_BuildEncodingMap(PyObject *string)¶
- Rückgabewert: Neue Referenz. Teil der Stabilen ABI.
Gibt eine Abbildung zurück, die für die Dekodierung einer benutzerdefinierten einbyteigen Kodierung geeignet ist. Bei einem Unicode-String string von bis zu 256 Zeichen, der eine Kodierungstabelle darstellt, wird entweder ein kompaktes internes Abbildungsobjekt oder ein Dictionary zurückgegeben, das Zeichenordinale auf Byte-Werte abbildet. Löst eine
TypeErroraus und gibtNULLbei ungültiger Eingabe zurück.Hinzugefügt in Version 3.2.
-
const char *PyUnicode_GetDefaultEncoding(void)¶
- Teil der Stable ABI.
Gibt den Namen der Standard-String-Kodierung,
"utf-8", zurück. Siehesys.getdefaultencoding().Der zurückgegebene String muss nicht freigegeben werden und ist bis zur Beendigung des Interpreters gültig.
-
Py_ssize_t PyUnicode_GetLength(PyObject *unicode)¶
- Teil der Stable ABI seit Version 3.7.
Gibt die Länge des Unicode-Objekts in Codepunkten zurück.
Bei einem Fehler wird eine Ausnahme gesetzt und
-1zurückgegeben.Hinzugefügt in Version 3.3.
-
Py_ssize_t PyUnicode_CopyCharacters(PyObject *to, Py_ssize_t to_start, PyObject *from, Py_ssize_t from_start, Py_ssize_t how_many)¶
Kopiert Zeichen von einem Unicode-Objekt in ein anderes. Diese Funktion führt bei Bedarf Zeichenkonvertierungen durch und greift nach Möglichkeit auf
memcpy()zurück. Gibt-1zurück und setzt eine Ausnahme bei einem Fehler, gibt andernfalls die Anzahl der kopierten Zeichen zurück.Der String darf noch nicht „verwendet“ worden sein. Siehe
PyUnicode_New()für Details.Hinzugefügt in Version 3.3.
-
int PyUnicode_Resize(PyObject **unicode, Py_ssize_t length);¶
- Teil der Stable ABI.
Ändert die Größe eines Unicode-Objekts *unicode auf die neue length in Codepunkten.
Versucht, den String vor Ort zu vergrößern (was normalerweise schneller ist, als einen neuen String zu allozieren und Zeichen zu kopieren) oder erstellt einen neuen String.
*unicode wird so geändert, dass es auf das neue (geänderte) Objekt zeigt und bei Erfolg
0zurückgegeben wird. Andernfalls wird-1zurückgegeben, eine Ausnahme wird gesetzt und *unicode bleibt unverändert.Die Funktion prüft nicht den Stringinhalt, das Ergebnis ist möglicherweise keine Zeichenkette in kanonischer Darstellung.
-
Py_ssize_t PyUnicode_Fill(PyObject *unicode, Py_ssize_t start, Py_ssize_t length, Py_UCS4 fill_char)¶
Füllt einen String mit einem Zeichen: schreibt fill_char in
unicode[start:start+length].Schlägt fehl, wenn fill_char größer als das maximale Zeichen des Strings ist oder wenn der String mehr als 1 Referenz hat.
Der String darf noch nicht „verwendet“ worden sein. Siehe
PyUnicode_New()für Details.Gibt die Anzahl der geschriebenen Zeichen zurück oder gibt
-1zurück und löst im Fehlerfall eine Ausnahme aus.Hinzugefügt in Version 3.3.
-
int PyUnicode_WriteChar(PyObject *unicode, Py_ssize_t index, Py_UCS4 character)¶
- Teil der Stable ABI seit Version 3.7.
Schreibt ein character in den String unicode an den nullbasierten index. Gibt
0bei Erfolg zurück,-1bei Fehler mit gesetzter Ausnahme.Diese Funktion prüft, ob unicode ein Unicode-Objekt ist, ob der Index nicht außerhalb der Grenzen liegt und ob die Referenzanzahl des Objekts eins ist. Siehe
PyUnicode_WRITE()für eine Version, die diese Prüfungen überspringt und sie zu Ihrer Verantwortung macht.Der String darf noch nicht „verwendet“ worden sein. Siehe
PyUnicode_New()für Details.Hinzugefügt in Version 3.3.
-
Py_UCS4 PyUnicode_ReadChar(PyObject *unicode, Py_ssize_t index)¶
- Teil der Stable ABI seit Version 3.7.
Liest ein Zeichen aus einem String. Diese Funktion prüft, ob unicode ein Unicode-Objekt ist und der Index nicht außerhalb der Grenzen liegt, im Gegensatz zu
PyUnicode_READ_CHAR(), das keine Fehlerprüfung durchführt.Gibt das Zeichen bei Erfolg zurück, bei einem Fehler mit gesetzter Ausnahme
-1.Hinzugefügt in Version 3.3.
-
PyObject *PyUnicode_Substring(PyObject *unicode, Py_ssize_t start, Py_ssize_t end)¶
- Rückgabewert: Neue Referenz. Teil der Stable ABI seit Version 3.7.
Gibt einen Teilstring von unicode zurück, vom Zeichenindex start (inklusive) bis zum Zeichenindex end (exklusive). Negative Indizes werden nicht unterstützt. Bei einem Fehler wird eine Ausnahme gesetzt und
NULLzurückgegeben.Hinzugefügt in Version 3.3.
-
Py_UCS4 *PyUnicode_AsUCS4(PyObject *unicode, Py_UCS4 *buffer, Py_ssize_t buflen, int copy_null)¶
- Teil der Stable ABI seit Version 3.7.
Kopiert den String unicode in einen UCS4-Buffer, einschließlich eines Nullzeichens, wenn copy_null gesetzt ist. Gibt
NULLzurück und setzt eine Ausnahme bei einem Fehler (insbesondere eineSystemError, wenn buflen kleiner als die Länge von unicode ist). buffer wird bei Erfolg zurückgegeben.Hinzugefügt in Version 3.3.
-
Py_UCS4 *PyUnicode_AsUCS4Copy(PyObject *unicode)¶
- Teil der Stable ABI seit Version 3.7.
Kopiert den String unicode in einen neuen UCS4-Buffer, der mit
PyMem_Malloc()alloziert wird. Wenn dies fehlschlägt, wirdNULLmit einer gesetztenMemoryErrorzurückgegeben. Der zurückgegebene Buffer hat immer einen zusätzlichen Null-Codepoint angehängt.Hinzugefügt in Version 3.3.
Locale-Kodierung¶
Die aktuelle Locale-Kodierung kann verwendet werden, um Text vom Betriebssystem zu dekodieren.
-
PyObject *PyUnicode_DecodeLocaleAndSize(const char *str, Py_ssize_t length, const char *errors)¶
- Rückgabewert: Neue Referenz. Teil der Stable ABI seit Version 3.7.
Dekodiert einen String von UTF-8 unter Android und VxWorks oder von der aktuellen Locale-Kodierung auf anderen Plattformen. Die unterstützten Fehlerbehandler sind
"strict"und"surrogateescape"(PEP 383). Der Dekoder verwendet den Fehlerbehandler"strict", wenn errorsNULList. str muss mit einem Nullzeichen enden, darf aber keine eingebetteten Nullzeichen enthalten.Verwenden Sie
PyUnicode_DecodeFSDefaultAndSize(), um einen String von der Dateisystemkodierung und dem Fehlerbehandler zu dekodieren.Diese Funktion ignoriert den Python UTF-8-Modus.
Siehe auch
Die Funktion
Py_DecodeLocale().Hinzugefügt in Version 3.3.
Geändert in Version 3.7: Die Funktion verwendet nun auch die aktuelle Locale-Kodierung für den Fehlerbehandler
surrogateescape, außer unter Android. Zuvor wurdePy_DecodeLocale()fürsurrogateescapeund die aktuelle Locale-Kodierung fürstrictverwendet.
-
PyObject *PyUnicode_DecodeLocale(const char *str, const char *errors)¶
- Rückgabewert: Neue Referenz. Teil der Stable ABI seit Version 3.7.
Ähnlich wie
PyUnicode_DecodeLocaleAndSize(), aber die Stringlänge wird mitstrlen()berechnet.Hinzugefügt in Version 3.3.
-
PyObject *PyUnicode_EncodeLocale(PyObject *unicode, const char *errors)¶
- Rückgabewert: Neue Referenz. Teil der Stable ABI seit Version 3.7.
Kodiert ein Unicode-Objekt zu UTF-8 unter Android und VxWorks oder zur aktuellen Locale-Kodierung auf anderen Plattformen. Die unterstützten Fehlerbehandler sind
"strict"und"surrogateescape"(PEP 383). Der Kodierer verwendet den Fehlerbehandler"strict", wenn errorsNULList. Gibt einbytes-Objekt zurück. unicode darf keine eingebetteten Nullzeichen enthalten.Verwenden Sie
PyUnicode_EncodeFSDefault(), um einen String in die Dateisystemkodierung und den Fehlerbehandler zu kodieren.Diese Funktion ignoriert den Python UTF-8-Modus.
Siehe auch
Die Funktion
Py_EncodeLocale().Hinzugefügt in Version 3.3.
Geändert in Version 3.7: Die Funktion verwendet nun auch die aktuelle Locale-Kodierung für den Fehlerbehandler
surrogateescape, außer unter Android. Zuvor wurdePy_EncodeLocale()fürsurrogateescapeund die aktuelle Locale-Kodierung fürstrictverwendet.
Dateisystem-Kodierung¶
Funktionen zum Kodieren von und Dekodieren von der Dateisystemkodierung und dem Fehlerbehandler (PEP 383 und PEP 529).
Um Dateinamen beim Parsen von Argumenten in bytes zu kodieren, sollte der Konverter "O&" verwendet werden, wobei PyUnicode_FSConverter() als Konvertierungsfunktion übergeben wird.
-
int PyUnicode_FSConverter(PyObject *obj, void *result)¶
- Teil der Stable ABI.
PyArg_Parse* Konverter: kodiert
str-Objekte – direkt oder über dieos.PathLike-Schnittstelle erhalten – inbytesunter Verwendung vonPyUnicode_EncodeFSDefault();bytes-Objekte werden unverändert ausgegeben. result muss die Adresse einer C-Variablen vom Typ PyObject* (oder PyBytesObject*) sein. Bei Erfolg wird die Variable auf eine neue starke Referenz auf ein bytes-Objekt gesetzt, das freigegeben werden muss, wenn es nicht mehr verwendet wird, und ein von Null verschiedener Wert zurückgegeben (Py_CLEANUP_SUPPORTED). Eingebettete Null-Bytes sind im Ergebnis nicht erlaubt. Bei einem Fehler wird0zurückgegeben und eine Ausnahme gesetzt.Wenn obj
NULList, gibt die Funktion eine starke Referenz, die in der durch result referenzierten Variable gespeichert ist, frei und gibt1zurück.Hinzugefügt in Version 3.1.
Geändert in Version 3.6: Akzeptiert ein pfadähnliches Objekt.
Um Dateinamen beim Parsen von Argumenten in str zu dekodieren, sollte der Konverter "O&" verwendet werden, wobei PyUnicode_FSDecoder() als Konvertierungsfunktion übergeben wird.
-
int PyUnicode_FSDecoder(PyObject *obj, void *result)¶
- Teil der Stable ABI.
PyArg_Parse* Konverter: dekodiert
bytes-Objekte – entweder direkt oder indirekt über dieos.PathLike-Schnittstelle erhalten – instrunter Verwendung vonPyUnicode_DecodeFSDefaultAndSize();str-Objekte werden als-is ausgegeben. result muss die Adresse einer C-Variablen vom Typ PyObject* (oder PyUnicodeObject*) sein. Bei Erfolg wird die Variable auf eine neue starke Referenz auf ein Unicode-Objekt gesetzt, das freigegeben werden muss, wenn es nicht mehr verwendet wird, und ein von Null verschiedener Wert zurückgegeben (Py_CLEANUP_SUPPORTED). Eingebettete Nullzeichen sind im Ergebnis nicht erlaubt. Bei einem Fehler wird0zurückgegeben und eine Ausnahme gesetzt.Wenn obj
NULList, gibt die Funktion die starke Referenz auf das Objekt, auf das durch result verwiesen wird, frei und gibt1zurück.Hinzugefügt in Version 3.2.
Geändert in Version 3.6: Akzeptiert ein pfadähnliches Objekt.
-
PyObject *PyUnicode_DecodeFSDefaultAndSize(const char *str, Py_ssize_t size)¶
- Rückgabewert: Neue Referenz. Teil der Stabilen ABI.
Dekodiert einen String von der Dateisystemkodierung und dem Fehlerbehandler.
Wenn Sie einen String von der aktuellen Locale-Kodierung dekodieren müssen, verwenden Sie
PyUnicode_DecodeLocaleAndSize().Siehe auch
Die Funktion
Py_DecodeLocale().Geändert in Version 3.6: Der Dateisystem-Fehlerbehandler wird jetzt verwendet.
-
PyObject *PyUnicode_DecodeFSDefault(const char *str)¶
- Rückgabewert: Neue Referenz. Teil der Stabilen ABI.
Dekodiert einen Null-terminierten String von der Dateisystemkodierung und dem Fehlerbehandler.
Wenn die Stringlänge bekannt ist, verwenden Sie
PyUnicode_DecodeFSDefaultAndSize().Geändert in Version 3.6: Der Dateisystem-Fehlerbehandler wird jetzt verwendet.
-
PyObject *PyUnicode_EncodeFSDefault(PyObject *unicode)¶
- Rückgabewert: Neue Referenz. Teil der Stabilen ABI.
Kodiert ein Unicode-Objekt in die Dateisystemkodierung und den Fehlerbehandler und gibt
byteszurück. Beachten Sie, dass das resultierendebytes-Objekt Null-Bytes enthalten kann.Wenn Sie einen String in die aktuelle Locale-Kodierung kodieren müssen, verwenden Sie
PyUnicode_EncodeLocale().Siehe auch
Die Funktion
Py_EncodeLocale().Hinzugefügt in Version 3.2.
Geändert in Version 3.6: Der Dateisystem-Fehlerbehandler wird jetzt verwendet.
wchar_t-Unterstützung¶
wchar_t-Unterstützung für Plattformen, die sie unterstützen.
-
PyObject *PyUnicode_FromWideChar(const wchar_t *wstr, Py_ssize_t size)¶
- Rückgabewert: Neue Referenz. Teil der Stabilen ABI.
Erstellt ein Unicode-Objekt aus dem
wchar_t-Buffer wstr der gegebenen Größe. Die Übergabe von-1als Größe bedeutet, dass die Funktion die Länge selbst berechnen muss, indem siewcslen()verwendet. Gibt bei einem FehlerNULLzurück.
-
Py_ssize_t PyUnicode_AsWideChar(PyObject *unicode, wchar_t *wstr, Py_ssize_t size)¶
- Teil der Stable ABI.
Kopiert den Inhalt des Unicode-Objekts in den
wchar_t-Buffer wstr. Es werden maximal sizewchar_t-Zeichen kopiert (ohne ein möglicherweise nachfolgendes Nullterminierungszeichen). Gibt die Anzahl der kopiertenwchar_t-Zeichen zurück oder im Fehlerfall-1.Wenn wstr
NULList, wird stattdessen die benötigte Größe zurückgegeben, um den gesamten Inhalt von unicode einschließlich einer terminierenden Null zu speichern.Beachten Sie, dass der resultierende wchar_t* String möglicherweise null-terminiert ist oder auch nicht. Es liegt in der Verantwortung des Aufrufers sicherzustellen, dass der wchar_t*-String null-terminiert ist, falls dies von der Anwendung benötigt wird. Beachten Sie auch, dass der wchar_t*-String Nullzeichen enthalten kann, was dazu führen würde, dass der String bei Verwendung mit den meisten C-Funktionen abgeschnitten wird.
-
wchar_t *PyUnicode_AsWideCharString(PyObject *unicode, Py_ssize_t *size)¶
- Teil der Stable ABI seit Version 3.7.
Konvertiert das Unicode-Objekt in einen Wide-Character-String. Der Ausgabestring endet immer mit einem Nullzeichen. Wenn size nicht
NULList, wird die Anzahl der Wide-Characters (ohne das abschließende Nullterminierungszeichen) in *size geschrieben. Beachten Sie, dass der resultierendewchar_t-String Nullzeichen enthalten kann, was dazu führt, dass der String bei Verwendung mit den meisten C-Funktionen abgeschnitten wird. Wenn sizeNULList und der wchar_t*-String Nullzeichen enthält, wird eineValueErrorausgelöst.Gibt bei Erfolg einen von
PyMem_Newallozierten Buffer zurück (verwenden SiePyMem_Free(), um ihn freizugeben). Bei einem Fehler gibt esNULLzurück und *size ist undefiniert. Löst eineMemoryErroraus, wenn die Speicherzuweisung fehlschlägt.Hinzugefügt in Version 3.2.
Geändert in Version 3.7: Löst eine
ValueErroraus, wenn sizeNULList und der wchar_t*-String Nullzeichen enthält.
Integrierte Codecs¶
Python bietet eine Reihe von integrierten Codecs, die für Geschwindigkeit in C geschrieben sind. Alle diese Codecs sind direkt über die folgenden Funktionen nutzbar.
Viele der folgenden APIs nehmen die beiden Argumente encoding und errors und haben die gleiche Semantik wie die des integrierten Konstruktors des String-Objekts str().
Das Setzen von encoding auf NULL bewirkt die Verwendung der Standardkodierung, die UTF-8 ist. Die Dateisystemaufrufe sollten PyUnicode_FSConverter() zur Kodierung von Dateinamen verwenden. Dies verwendet intern die Dateisystemkodierung und den Fehlerbehandler.
Die Fehlerbehandlung wird durch errors festgelegt, die auch auf NULL gesetzt werden kann, was bedeutet, dass die für den Codec definierte Standardbehandlung verwendet wird. Die Standardfehlerbehandlung für alle integrierten Codecs ist "strict" (ValueError wird ausgelöst).
Die Codecs verwenden alle eine ähnliche Schnittstelle. Nur Abweichungen von den folgenden generischen werden der Einfachheit halber dokumentiert.
Generische Codecs¶
Das folgende Makro ist bereitgestellt:
-
Py_UNICODE_REPLACEMENT_CHARACTER¶
Der Unicode-Codepoint
U+FFFD(Ersetzungszeichen).Dieses Unicode-Zeichen wird als Ersetzungszeichen beim Dekodieren verwendet, wenn das Argument errors auf "replace" gesetzt ist.
Dies sind die generischen Codec-APIs:
-
PyObject *PyUnicode_Decode(const char *str, Py_ssize_t size, const char *encoding, const char *errors)¶
- Rückgabewert: Neue Referenz. Teil der Stabilen ABI.
Erstellt ein Unicode-Objekt durch Dekodieren von size Bytes des kodierten Strings str. encoding und errors haben die gleiche Bedeutung wie die Parameter mit denselben Namen im integrierten Funktionskonstruktor
str(). Der zu verwendende Codec wird über die Python-Codec-Registry nachgeschlagen. GibtNULLzurück, wenn vom Codec eine Ausnahme ausgelöst wurde.
-
PyObject *PyUnicode_AsEncodedString(PyObject *unicode, const char *encoding, const char *errors)¶
- Rückgabewert: Neue Referenz. Teil der Stabilen ABI.
Kodiert ein Unicode-Objekt und gibt das Ergebnis als Python-Bytes-Objekt zurück. encoding und errors haben die gleiche Bedeutung wie die Parameter mit denselben Namen in der Unicode-Methode
encode(). Der zu verwendende Codec wird über die Python-Codec-Registry nachgeschlagen. GibtNULLzurück, wenn vom Codec eine Ausnahme ausgelöst wurde.
UTF-8-Codecs¶
Dies sind die UTF-8-Codec-APIs.
-
PyObject *PyUnicode_DecodeUTF8(const char *str, Py_ssize_t size, const char *errors)¶
- Rückgabewert: Neue Referenz. Teil der Stabilen ABI.
Erstellt ein Unicode-Objekt durch Dekodierung von size Bytes des UTF-8-kodierten Strings str. Gibt
NULLzurück, wenn der Codec eine Ausnahme ausgelöst hat.
-
PyObject *PyUnicode_DecodeUTF8Stateful(const char *str, Py_ssize_t size, const char *errors, Py_ssize_t *consumed)¶
- Rückgabewert: Neue Referenz. Teil der Stabilen ABI.
Wenn consumed
NULList, verhält es sich wiePyUnicode_DecodeUTF8(). Wenn consumed nichtNULList, werden nachfolgende unvollständige UTF-8-Byte-Sequenzen nicht als Fehler behandelt. Diese Bytes werden nicht dekodiert und die Anzahl der dekodierten Bytes wird in consumed gespeichert.
-
PyObject *PyUnicode_AsUTF8String(PyObject *unicode)¶
- Rückgabewert: Neue Referenz. Teil der Stabilen ABI.
Kodiert ein Unicode-Objekt mit UTF-8 und gibt das Ergebnis als Python-Byte-Objekt zurück. Die Fehlerbehandlung ist „strict“. Gibt
NULLzurück, wenn der Codec eine Ausnahme ausgelöst hat.Die Funktion schlägt fehl, wenn der String Surrogat-Codepunkte enthält (
U+D800-U+DFFF).
-
const char *PyUnicode_AsUTF8AndSize(PyObject *unicode, Py_ssize_t *size)¶
- Teil der Stable ABI seit Version 3.10.
Gibt einen Zeiger auf die UTF-8-Kodierung des Unicode-Objekts zurück und speichert die Größe der kodierten Darstellung (in Bytes) in size. Das Argument size kann
NULLsein; in diesem Fall wird keine Größe gespeichert. Der zurückgegebene Puffer hat immer ein zusätzliches Null-Byte angehängt (nicht in size enthalten), unabhängig davon, ob andere Null-Codepunkte vorhanden sind.Bei einem Fehler wird eine Ausnahme gesetzt, size auf
-1gesetzt (falls es nicht NULL ist) undNULLzurückgegeben.Die Funktion schlägt fehl, wenn der String Surrogat-Codepunkte enthält (
U+D800-U+DFFF).Diese Funktion cacht die UTF-8-Darstellung des Strings im Unicode-Objekt, und nachfolgende Aufrufe geben einen Zeiger auf denselben Puffer zurück. Der Aufrufer ist nicht für die Freigabe des Puffers verantwortlich. Der Puffer wird freigegeben und Zeiger darauf werden ungültig, wenn das Unicode-Objekt vom Garbage Collector gesammelt wird.
Hinzugefügt in Version 3.3.
Geändert in Version 3.7: Der Rückgabetyp ist jetzt
const char *anstelle vonchar *.Geändert in Version 3.10: Diese Funktion ist Teil der begrenzten API.
-
const char *PyUnicode_AsUTF8(PyObject *unicode)¶
Wie
PyUnicode_AsUTF8AndSize(), aber speichert die Größe nicht.Warnung
Diese Funktion hat kein spezielles Verhalten für Null-Zeichen, die in unicode eingebettet sind. Infolgedessen bleiben Strings, die Null-Zeichen enthalten, im zurückgegebenen String erhalten, was einige C-Funktionen als String-Ende interpretieren könnten, was zu einer Kürzung führt. Wenn eine Kürzung ein Problem darstellt, wird empfohlen, stattdessen
PyUnicode_AsUTF8AndSize()zu verwenden.Hinzugefügt in Version 3.3.
Geändert in Version 3.7: Der Rückgabetyp ist jetzt
const char *anstelle vonchar *.
UTF-32 Codecs¶
Dies sind die UTF-32-Codec-APIs
-
PyObject *PyUnicode_DecodeUTF32(const char *str, Py_ssize_t size, const char *errors, int *byteorder)¶
- Rückgabewert: Neue Referenz. Teil der Stabilen ABI.
Dekodiert size Bytes aus einem UTF-32-kodierten Pufferstring und gibt das entsprechende Unicode-Objekt zurück. errors (falls nicht
NULL) definiert die Fehlerbehandlung. Standardmäßig ist dies „strict“.Wenn byteorder nicht
NULList, beginnt der Dekoder mit der Dekodierung in der angegebenen Byte-Reihenfolge.*byteorder == -1: little endian *byteorder == 0: native order *byteorder == 1: big endian
Wenn
*byteordernull ist und die ersten vier Bytes der Eingabedaten ein Byte Order Mark (BOM) sind, schaltet der Dekoder in diese Byte-Reihenfolge um und das BOM wird nicht in den resultierenden Unicode-String kopiert. Wenn*byteorder-1oder1ist, wird jedes Byte Order Mark in die Ausgabe kopiert.Nach Abschluss wird *byteorder auf die aktuelle Byte-Reihenfolge am Ende der Eingabedaten gesetzt.
Wenn byteorder
NULList, startet der Codec im nativen Reihenfolgemodus.Gibt
NULLzurück, wenn der Codec eine Ausnahme ausgelöst hat.
-
PyObject *PyUnicode_DecodeUTF32Stateful(const char *str, Py_ssize_t size, const char *errors, int *byteorder, Py_ssize_t *consumed)¶
- Rückgabewert: Neue Referenz. Teil der Stabilen ABI.
Wenn consumed
NULList, verhält es sich wiePyUnicode_DecodeUTF32(). Wenn consumed nichtNULList, behandeltPyUnicode_DecodeUTF32Stateful()nachfolgende unvollständige UTF-32-Byte-Sequenzen (wie eine Anzahl von Bytes, die nicht durch vier teilbar ist) nicht als Fehler. Diese Bytes werden nicht dekodiert und die Anzahl der dekodierten Bytes wird in consumed gespeichert.
-
PyObject *PyUnicode_AsUTF32String(PyObject *unicode)¶
- Rückgabewert: Neue Referenz. Teil der Stabilen ABI.
Gibt einen Python-Byte-String mit der UTF-32-Kodierung in nativer Byte-Reihenfolge zurück. Der String beginnt immer mit einem BOM-Markierungszeichen. Die Fehlerbehandlung ist „strict“. Gibt
NULLzurück, wenn der Codec eine Ausnahme ausgelöst hat.
UTF-16 Codecs¶
Dies sind die UTF-16-Codec-APIs
-
PyObject *PyUnicode_DecodeUTF16(const char *str, Py_ssize_t size, const char *errors, int *byteorder)¶
- Rückgabewert: Neue Referenz. Teil der Stabilen ABI.
Dekodiert size Bytes aus einem UTF-16-kodierten Pufferstring und gibt das entsprechende Unicode-Objekt zurück. errors (falls nicht
NULL) definiert die Fehlerbehandlung. Standardmäßig ist dies „strict“.Wenn byteorder nicht
NULList, beginnt der Dekoder mit der Dekodierung in der angegebenen Byte-Reihenfolge.*byteorder == -1: little endian *byteorder == 0: native order *byteorder == 1: big endian
Wenn
*byteordernull ist und die ersten zwei Bytes der Eingabedaten ein Byte Order Mark (BOM) sind, schaltet der Dekoder in diese Byte-Reihenfolge um und das BOM wird nicht in den resultierenden Unicode-String kopiert. Wenn*byteorder-1oder1ist, wird jedes Byte Order Mark in die Ausgabe kopiert (wo es entweder zu einem\ufeffoder einem\ufffe-Zeichen führt).Nach Abschluss wird
*byteorderauf die aktuelle Byte-Reihenfolge am Ende der Eingabedaten gesetzt.Wenn byteorder
NULList, startet der Codec im nativen Reihenfolgemodus.Gibt
NULLzurück, wenn der Codec eine Ausnahme ausgelöst hat.
-
PyObject *PyUnicode_DecodeUTF16Stateful(const char *str, Py_ssize_t size, const char *errors, int *byteorder, Py_ssize_t *consumed)¶
- Rückgabewert: Neue Referenz. Teil der Stabilen ABI.
Wenn consumed
NULList, verhält es sich wiePyUnicode_DecodeUTF16(). Wenn consumed nichtNULList, behandeltPyUnicode_DecodeUTF16Stateful()nachfolgende unvollständige UTF-16-Byte-Sequenzen (wie eine ungerade Anzahl von Bytes oder ein aufgeteiltes Surrogatpaar) nicht als Fehler. Diese Bytes werden nicht dekodiert und die Anzahl der dekodierten Bytes wird in consumed gespeichert.
-
PyObject *PyUnicode_AsUTF16String(PyObject *unicode)¶
- Rückgabewert: Neue Referenz. Teil der Stabilen ABI.
Gibt einen Python-Byte-String mit der UTF-16-Kodierung in nativer Byte-Reihenfolge zurück. Der String beginnt immer mit einem BOM-Markierungszeichen. Die Fehlerbehandlung ist „strict“. Gibt
NULLzurück, wenn der Codec eine Ausnahme ausgelöst hat.
UTF-7 Codecs¶
Dies sind die UTF-7-Codec-APIs
-
PyObject *PyUnicode_DecodeUTF7(const char *str, Py_ssize_t size, const char *errors)¶
- Rückgabewert: Neue Referenz. Teil der Stabilen ABI.
Erstellt ein Unicode-Objekt durch Dekodierung von size Bytes des UTF-7-kodierten Strings str. Gibt
NULLzurück, wenn der Codec eine Ausnahme ausgelöst hat.
-
PyObject *PyUnicode_DecodeUTF7Stateful(const char *str, Py_ssize_t size, const char *errors, Py_ssize_t *consumed)¶
- Rückgabewert: Neue Referenz. Teil der Stabilen ABI.
Wenn consumed
NULList, verhält es sich wiePyUnicode_DecodeUTF7(). Wenn consumed nichtNULList, werden nachfolgende unvollständige UTF-7-Base64-Abschnitte nicht als Fehler behandelt. Diese Bytes werden nicht dekodiert und die Anzahl der dekodierten Bytes wird in consumed gespeichert.
Unicode-Escape Codecs¶
Dies sind die APIs des „Unicode Escape“-Codecs
-
PyObject *PyUnicode_DecodeUnicodeEscape(const char *str, Py_ssize_t size, const char *errors)¶
- Rückgabewert: Neue Referenz. Teil der Stabilen ABI.
Erstellt ein Unicode-Objekt durch Dekodierung von size Bytes des Unicode-Escape-kodierten Strings str. Gibt
NULLzurück, wenn der Codec eine Ausnahme ausgelöst hat.
-
PyObject *PyUnicode_AsUnicodeEscapeString(PyObject *unicode)¶
- Rückgabewert: Neue Referenz. Teil der Stabilen ABI.
Kodiert ein Unicode-Objekt mit Unicode-Escape und gibt das Ergebnis als Byte-Objekt zurück. Die Fehlerbehandlung ist „strict“. Gibt
NULLzurück, wenn der Codec eine Ausnahme ausgelöst hat.
Raw-Unicode-Escape Codecs¶
Dies sind die APIs des „Raw Unicode Escape“-Codecs
-
PyObject *PyUnicode_DecodeRawUnicodeEscape(const char *str, Py_ssize_t size, const char *errors)¶
- Rückgabewert: Neue Referenz. Teil der Stabilen ABI.
Erstellt ein Unicode-Objekt durch Dekodierung von size Bytes des Raw-Unicode-Escape-kodierten Strings str. Gibt
NULLzurück, wenn der Codec eine Ausnahme ausgelöst hat.
-
PyObject *PyUnicode_AsRawUnicodeEscapeString(PyObject *unicode)¶
- Rückgabewert: Neue Referenz. Teil der Stabilen ABI.
Kodiert ein Unicode-Objekt mit Raw-Unicode-Escape und gibt das Ergebnis als Byte-Objekt zurück. Die Fehlerbehandlung ist „strict“. Gibt
NULLzurück, wenn der Codec eine Ausnahme ausgelöst hat.
Latin-1 Codecs¶
Dies sind die Latin-1-Codec-APIs: Latin-1 entspricht den ersten 256 Unicode-Ordinalzahlen und nur diese werden von den Codecs beim Kodieren akzeptiert.
-
PyObject *PyUnicode_DecodeLatin1(const char *str, Py_ssize_t size, const char *errors)¶
- Rückgabewert: Neue Referenz. Teil der Stabilen ABI.
Erstellt ein Unicode-Objekt durch Dekodierung von size Bytes des Latin-1-kodierten Strings str. Gibt
NULLzurück, wenn der Codec eine Ausnahme ausgelöst hat.
-
PyObject *PyUnicode_AsLatin1String(PyObject *unicode)¶
- Rückgabewert: Neue Referenz. Teil der Stabilen ABI.
Kodiert ein Unicode-Objekt mit Latin-1 und gibt das Ergebnis als Python-Byte-Objekt zurück. Die Fehlerbehandlung ist „strict“. Gibt
NULLzurück, wenn der Codec eine Ausnahme ausgelöst hat.
ASCII Codecs¶
Dies sind die ASCII-Codec-APIs. Nur 7-Bit-ASCII-Daten werden akzeptiert. Alle anderen Codes erzeugen Fehler.
-
PyObject *PyUnicode_DecodeASCII(const char *str, Py_ssize_t size, const char *errors)¶
- Rückgabewert: Neue Referenz. Teil der Stabilen ABI.
Erstellt ein Unicode-Objekt durch Dekodierung von size Bytes des ASCII-kodierten Strings str. Gibt
NULLzurück, wenn der Codec eine Ausnahme ausgelöst hat.
-
PyObject *PyUnicode_AsASCIIString(PyObject *unicode)¶
- Rückgabewert: Neue Referenz. Teil der Stabilen ABI.
Kodiert ein Unicode-Objekt mit ASCII und gibt das Ergebnis als Python-Byte-Objekt zurück. Die Fehlerbehandlung ist „strict“. Gibt
NULLzurück, wenn der Codec eine Ausnahme ausgelöst hat.
Character Map Codecs¶
Dieser Codec ist besonders, da er zur Implementierung vieler verschiedener Codecs verwendet werden kann (und dies tatsächlich getan wurde, um die meisten Standardcodecs zu erhalten, die im Paket encodings enthalten sind). Der Codec verwendet Abbildungen zum Kodieren und Dekodieren von Zeichen. Die bereitgestellten Abbildungsobjekte müssen die __getitem__()-Schnittstelle unterstützen; Wörterbücher und Sequenzen eignen sich gut.
Dies sind die Mapping-Codec-APIs
-
PyObject *PyUnicode_DecodeCharmap(const char *str, Py_ssize_t length, PyObject *mapping, const char *errors)¶
- Rückgabewert: Neue Referenz. Teil der Stabilen ABI.
Erstellt ein Unicode-Objekt durch Dekodierung von size Bytes des kodierten Strings str unter Verwendung des gegebenen mapping-Objekts. Gibt
NULLzurück, wenn vom Codec eine Ausnahme ausgelöst wurde.Wenn mapping
NULList, wird die Latin-1-Dekodierung angewendet. Andernfalls muss mapping Byte-Ordinalzahlen (Ganzzahlen im Bereich von 0 bis 255) auf Unicode-Strings, Ganzzahlen (die dann als Unicode-Ordinalzahlen interpretiert werden) oderNoneabbilden. Nicht zugeordnete Datenbytes – solche, die einenLookupErrorverursachen, sowie solche, die aufNone,0xFFFEoder'\ufffe'abgebildet werden – werden als undefinierte Zuordnungen behandelt und verursachen einen Fehler.
-
PyObject *PyUnicode_AsCharmapString(PyObject *unicode, PyObject *mapping)¶
- Rückgabewert: Neue Referenz. Teil der Stabilen ABI.
Kodiert ein Unicode-Objekt unter Verwendung des gegebenen mapping-Objekts und gibt das Ergebnis als Bytes-Objekt zurück. Fehlerbehandlung ist „strict“. Gibt
NULLzurück, wenn vom Codec eine Ausnahme ausgelöst wurde.Das mapping-Objekt muss Unicode-Ordinalzahlen auf Bytes-Objekte, Ganzzahlen im Bereich von 0 bis 255 oder
Noneabbilden. Nicht zugeordnete Zeichen-Ordinalzahlen (solche, die einenLookupErrorverursachen) sowie solche, die aufNoneabgebildet werden, werden als „undefinierte Zuordnung“ behandelt und verursachen einen Fehler.
Die folgende Codec-API ist speziell, da sie Unicode zu Unicode abbildet.
-
PyObject *PyUnicode_Translate(PyObject *unicode, PyObject *table, const char *errors)¶
- Rückgabewert: Neue Referenz. Teil der Stabilen ABI.
Übersetzt einen String, indem eine Zeichenzuordnungstabelle darauf angewendet wird, und gibt das resultierende Unicode-Objekt zurück. Gibt
NULLzurück, wenn vom Codec eine Ausnahme ausgelöst wurde.Die Zuordnungstabelle muss Unicode-Ordinalzahlen auf Unicode-Ordinalzahlen oder
None(was die Löschung des Zeichens verursacht) abbilden.Zuordnungstabellen müssen nur die
__getitem__()-Schnittstelle bereitstellen; Wörterbücher und Sequenzen eignen sich gut. Nicht zugeordnete Zeichen-Ordinalzahlen (solche, die einenLookupErrorverursachen) bleiben unberührt und werden 1:1 kopiert.errors hat die übliche Bedeutung für Codecs. Es kann
NULLsein, was die Verwendung der Standardfehlerbehandlung anzeigt.
MBCS-Codecs für Windows¶
Dies sind die MBCS-Codec-APIs. Sie sind derzeit nur unter Windows verfügbar und verwenden die Win32-MBCS-Konverter zur Implementierung der Konvertierungen. Beachten Sie, dass MBCS (oder DBCS) eine Klasse von Kodierungen ist, nicht nur eine einzige. Die Zielkodierung wird durch die Benutzereinstellungen auf dem Computer definiert, auf dem der Codec ausgeführt wird.
-
PyObject *PyUnicode_DecodeMBCS(const char *str, Py_ssize_t size, const char *errors)¶
- Rückgabewert: Neue Referenz. Teil der Stable ABI unter Windows seit Version 3.7.
Erstellt ein Unicode-Objekt durch Dekodierung von size Bytes des MBCS-kodierten Strings str. Gibt
NULLzurück, wenn vom Codec eine Ausnahme ausgelöst wurde.
-
PyObject *PyUnicode_DecodeMBCSStateful(const char *str, Py_ssize_t size, const char *errors, Py_ssize_t *consumed)¶
- Rückgabewert: Neue Referenz. Teil der Stable ABI unter Windows seit Version 3.7.
Wenn consumed
NULList, verhält es sich wiePyUnicode_DecodeMBCS(). Wenn consumed nichtNULList, dekodiertPyUnicode_DecodeMBCSStateful()keine nachfolgenden Lead-Bytes und die Anzahl der dekodierten Bytes wird in consumed gespeichert.
-
PyObject *PyUnicode_DecodeCodePageStateful(int code_page, const char *str, Py_ssize_t size, const char *errors, Py_ssize_t *consumed)¶
- Rückgabewert: Neue Referenz. Teil der Stable ABI unter Windows seit Version 3.7.
Ähnlich wie
PyUnicode_DecodeMBCSStateful(), verwendet jedoch die von code_page angegebene Codeseite.
-
PyObject *PyUnicode_AsMBCSString(PyObject *unicode)¶
- Rückgabewert: Neue Referenz. Teil der Stable ABI unter Windows seit Version 3.7.
Kodiert ein Unicode-Objekt mit MBCS und gibt das Ergebnis als Python-Bytes-Objekt zurück. Fehlerbehandlung ist „strict“. Gibt
NULLzurück, wenn vom Codec eine Ausnahme ausgelöst wurde.
-
PyObject *PyUnicode_EncodeCodePage(int code_page, PyObject *unicode, const char *errors)¶
- Rückgabewert: Neue Referenz. Teil der Stable ABI unter Windows seit Version 3.7.
Kodiert das Unicode-Objekt unter Verwendung der angegebenen Codeseite und gibt ein Python-Bytes-Objekt zurück. Gibt
NULLzurück, wenn vom Codec eine Ausnahme ausgelöst wurde. Verwenden Sie die CodeseiteCP_ACP, um den MBCS-Encoder zu erhalten.Hinzugefügt in Version 3.3.
Methoden und Slot-Funktionen¶
Die folgenden APIs sind in der Lage, Unicode-Objekte und Strings als Eingabe zu verarbeiten (wir bezeichnen sie in den Beschreibungen als Strings) und geben entsprechend Unicode-Objekte oder Ganzzahlen zurück.
Sie geben alle NULL oder -1 zurück, wenn ein Fehler auftritt.
-
PyObject *PyUnicode_Concat(PyObject *left, PyObject *right)¶
- Rückgabewert: Neue Referenz. Teil der Stabilen ABI.
Verketten von zwei Strings, was zu einem neuen Unicode-String führt.
-
PyObject *PyUnicode_Split(PyObject *unicode, PyObject *sep, Py_ssize_t maxsplit)¶
- Rückgabewert: Neue Referenz. Teil der Stabilen ABI.
Teilt einen String und gibt eine Liste von Unicode-Strings zurück. Wenn sep
NULList, wird die Teilung an allen Leerzeichen-Substrings vorgenommen. Andernfalls wird an dem angegebenen Trennzeichen geteilt. Es werden maximal maxsplit Teilungen vorgenommen. Bei negativen Werten gibt es kein Limit. Trennzeichen sind nicht in der Ergebnisliste enthalten.Bei einem Fehler wird
NULLmit einer gesetzten Ausnahme zurückgegeben.Entspricht
str.split().
-
PyObject *PyUnicode_RSplit(PyObject *unicode, PyObject *sep, Py_ssize_t maxsplit)¶
- Rückgabewert: Neue Referenz. Teil der Stabilen ABI.
Ähnlich wie
PyUnicode_Split(), aber die Teilung erfolgt beginnend am Ende des Strings.Bei einem Fehler wird
NULLmit einer gesetzten Ausnahme zurückgegeben.Entspricht
str.rsplit().
-
PyObject *PyUnicode_Splitlines(PyObject *unicode, int keepends)¶
- Rückgabewert: Neue Referenz. Teil der Stabilen ABI.
Teilt einen Unicode-String an Zeilenumbrüchen und gibt eine Liste von Unicode-Strings zurück. CRLF wird als ein Zeilenumbruch betrachtet. Wenn keepends
0ist, werden die Zeilenumbruchzeichen nicht in die resultierenden Strings aufgenommen.
-
PyObject *PyUnicode_Partition(PyObject *unicode, PyObject *sep)¶
- Rückgabewert: Neue Referenz. Teil der Stabilen ABI.
Teilt einen Unicode-String am ersten Vorkommen von sep und gibt ein 3-Tupel zurück, das den Teil vor dem Trennzeichen, das Trennzeichen selbst und den Teil nach dem Trennzeichen enthält. Wenn das Trennzeichen nicht gefunden wird, wird ein 3-Tupel zurückgegeben, das den String selbst gefolgt von zwei leeren Strings enthält.
sep darf nicht leer sein.
Bei einem Fehler wird
NULLmit einer gesetzten Ausnahme zurückgegeben.Entspricht
str.partition().
-
PyObject *PyUnicode_RPartition(PyObject *unicode, PyObject *sep)¶
- Rückgabewert: Neue Referenz. Teil der Stabilen ABI.
Ähnlich wie
PyUnicode_Partition(), teilt aber einen Unicode-String am letzten Vorkommen von sep. Wenn das Trennzeichen nicht gefunden wird, wird ein 3-Tupel zurückgegeben, das zwei leere Strings gefolgt vom String selbst enthält.sep darf nicht leer sein.
Bei einem Fehler wird
NULLmit einer gesetzten Ausnahme zurückgegeben.Entspricht
str.rpartition().
-
PyObject *PyUnicode_Join(PyObject *separator, PyObject *seq)¶
- Rückgabewert: Neue Referenz. Teil der Stabilen ABI.
Verbindet eine Sequenz von Strings mit dem gegebenen separator und gibt den resultierenden Unicode-String zurück.
-
Py_ssize_t PyUnicode_Tailmatch(PyObject *unicode, PyObject *substr, Py_ssize_t start, Py_ssize_t end, int direction)¶
- Teil der Stable ABI.
Gibt
1zurück, wenn substr mitunicode[start:end]am angegebenen Ende übereinstimmt (direction ==-1bedeutet ein Präfix-Match, direction ==1ein Suffix-Match), andernfalls0. Gibt-1zurück, wenn ein Fehler aufgetreten ist.
-
Py_ssize_t PyUnicode_Find(PyObject *unicode, PyObject *substr, Py_ssize_t start, Py_ssize_t end, int direction)¶
- Teil der Stable ABI.
Gibt die erste Position von substr in
unicode[start:end]unter Verwendung der angegebenen direction zurück (direction ==1bedeutet eine Vorwärtssuche, direction ==-1eine Rückwärtssuche). Der Rückgabewert ist der Index des ersten Treffers; ein Wert von-1bedeutet, dass kein Treffer gefunden wurde, und-2bedeutet, dass ein Fehler aufgetreten ist und eine Ausnahme gesetzt wurde.
-
Py_ssize_t PyUnicode_FindChar(PyObject *unicode, Py_UCS4 ch, Py_ssize_t start, Py_ssize_t end, int direction)¶
- Teil der Stable ABI seit Version 3.7.
Gibt die erste Position des Zeichens ch in
unicode[start:end]unter Verwendung der angegebenen direction zurück (direction ==1bedeutet eine Vorwärtssuche, direction ==-1eine Rückwärtssuche). Der Rückgabewert ist der Index des ersten Treffers; ein Wert von-1bedeutet, dass kein Treffer gefunden wurde, und-2bedeutet, dass ein Fehler aufgetreten ist und eine Ausnahme gesetzt wurde.Hinzugefügt in Version 3.3.
Geändert in Version 3.7: start und end werden nun so angepasst, dass sie sich wie
unicode[start:end]verhalten.
-
Py_ssize_t PyUnicode_Count(PyObject *unicode, PyObject *substr, Py_ssize_t start, Py_ssize_t end)¶
- Teil der Stable ABI.
Gibt die Anzahl der nicht überlappenden Vorkommen von substr in
unicode[start:end]zurück. Gibt-1zurück, wenn ein Fehler aufgetreten ist.
-
PyObject *PyUnicode_Replace(PyObject *unicode, PyObject *substr, PyObject *replstr, Py_ssize_t maxcount)¶
- Rückgabewert: Neue Referenz. Teil der Stabilen ABI.
Ersetzt maximal maxcount Vorkommen von substr in unicode durch replstr und gibt das resultierende Unicode-Objekt zurück. maxcount ==
-1bedeutet, alle Vorkommen zu ersetzen.
-
int PyUnicode_Compare(PyObject *left, PyObject *right)¶
- Teil der Stable ABI.
Vergleicht zwei Strings und gibt
-1,0oder1für kleiner als, gleich bzw. größer als zurück.Diese Funktion gibt bei einem Fehler
-1zurück, daher sollte manPyErr_Occurred()aufrufen, um nach Fehlern zu suchen.Siehe auch
Die Funktion
PyUnicode_Equal().
-
int PyUnicode_Equal(PyObject *a, PyObject *b)¶
- Teil des Stable ABI seit Version 3.14.
Prüft, ob zwei Strings gleich sind.
Gibt
1zurück, wenn a gleich b ist.Gibt
0zurück, wenn a nicht gleich b ist.Setzen Sie eine
TypeErrorAusnahme und geben Sie-1zurück, wenn a oder b keinstr-Objekt ist.
Die Funktion ist immer erfolgreich, wenn a und b
str-Objekte sind.Die Funktion arbeitet für
str-Unterklassen, beachtet jedoch keine benutzerdefinierte__eq__()-Methode.Siehe auch
Die Funktion
PyUnicode_Compare().Hinzugefügt in Version 3.14.
-
int PyUnicode_EqualToUTF8AndSize(PyObject *unicode, const char *string, Py_ssize_t size)¶
- Teil des Stable ABI seit Version 3.13.
Vergleicht ein Unicode-Objekt mit einem Zeichenpuffer, der als UTF-8 oder ASCII kodiert interpretiert wird, und gibt `true` (
1) zurück, wenn sie gleich sind, oder `false` (0) andernfalls. Wenn das Unicode-Objekt Surrogat-Codepunkte (U+D800-U+DFFF) enthält oder die C-Zeichenkette kein gültiges UTF-8 ist, wird `false` (0) zurückgegeben.Diese Funktion löst keine Ausnahmen aus.
Hinzugefügt in Version 3.13.
-
int PyUnicode_EqualToUTF8(PyObject *unicode, const char *string)¶
- Teil des Stable ABI seit Version 3.13.
Ähnlich wie
PyUnicode_EqualToUTF8AndSize(), berechnet aber die Länge von string mitstrlen(). Wenn das Unicode-Objekt Nullzeichen enthält, wird `false` (0) zurückgegeben.Hinzugefügt in Version 3.13.
-
int PyUnicode_CompareWithASCIIString(PyObject *unicode, const char *string)¶
- Teil der Stable ABI.
Vergleicht ein Unicode-Objekt, unicode, mit string und gibt
-1,0,1für kleiner als, gleich und größer als zurück. Es ist am besten, nur ASCII-kodierte Zeichenketten zu übergeben, aber die Funktion interpretiert die Eingabezeichenkette als ISO-8859-1, wenn sie Nicht-ASCII-Zeichen enthält.Diese Funktion löst keine Ausnahmen aus.
-
PyObject *PyUnicode_RichCompare(PyObject *left, PyObject *right, int op)¶
- Rückgabewert: Neue Referenz. Teil der Stabilen ABI.
Vergleicht reichhaltig zwei Unicode-Zeichenketten und gibt eines der folgenden zurück
NULLim Falle einer ausgelösten AusnahmePy_NotImplementedim Falle einer unbekannten Typenkombination
Mögliche Werte für op sind
Py_GT,Py_GE,Py_EQ,Py_NE,Py_LTundPy_LE.
-
PyObject *PyUnicode_Format(PyObject *format, PyObject *args)¶
- Rückgabewert: Neue Referenz. Teil der Stabilen ABI.
Gibt ein neues Zeichenkettenobjekt aus format und args zurück; dies ist analog zu
format % args.
-
int PyUnicode_Contains(PyObject *unicode, PyObject *substr)¶
- Teil der Stable ABI.
Prüft, ob substr in unicode enthalten ist, und gibt entsprechend `true` oder `false` zurück.
substr muss zu einer Unicode-Zeichenkette mit einem Element zwangfähig sein.
-1wird zurückgegeben, wenn ein Fehler aufgetreten ist.
-
void PyUnicode_InternInPlace(PyObject **p_unicode)¶
- Teil der Stable ABI.
Interniert das Argument *p_unicode an Ort und Stelle. Das Argument muss die Adresse einer Zeigervariablen sein, die auf ein Python-Unicode-Zeichenkettenobjekt zeigt. Wenn eine vorhandene internierte Zeichenkette existiert, die mit *p_unicode identisch ist, wird *p_unicode darauf gesetzt (die Referenz auf das alte Zeichenkettenobjekt wird freigegeben und eine neue starke Referenz auf das internierte Zeichenkettenobjekt erstellt), andernfalls wird *p_unicode unverändert gelassen und interniert.
(Klarstellung: Auch wenn viel über Referenzen gesprochen wird, betrachten Sie diese Funktion als referenzneutral. Sie müssen das Objekt, das Sie übergeben, besitzen; nach dem Aufruf besitzen Sie die übergebene Referenz nicht mehr, aber Sie besitzen neu das Ergebnis.)
Diese Funktion löst niemals eine Ausnahme aus. Im Fehlerfall wird das Argument unverändert gelassen, ohne es zu internieren.
Instanzen von Unterklassen von
strdürfen nicht internisiert werden, d.h. PyUnicode_CheckExact(*p_unicode) muss wahr sein. Wenn dies nicht der Fall ist, wird das Argument – wie bei jedem anderen Fehler – unverändert gelassen.Beachten Sie, dass internierte Zeichenketten nicht „unsterblich“ sind. Sie müssen eine Referenz auf das Ergebnis behalten, um von der Internierung zu profitieren.
-
PyObject *PyUnicode_InternFromString(const char *str)¶
- Rückgabewert: Neue Referenz. Teil der Stabilen ABI.
Eine Kombination aus
PyUnicode_FromString()undPyUnicode_InternInPlace(), gedacht für statisch zugewiesene Zeichenketten.Gibt eine neue („besitzte“) Referenz auf entweder ein neues, internierte Unicode-Zeichenkettenobjekt oder ein früheres, internierte Zeichenkettenobjekt mit demselben Wert zurück.
Python kann eine Referenz auf das Ergebnis behalten oder es unsterblich machen und so verhindern, dass es sofort vom Garbage Collector bereinigt wird. Für die Internierung einer unbegrenzten Anzahl verschiedener Zeichenketten, wie sie aus Benutzereingaben stammen, ist es vorzuziehen, stattdessen
PyUnicode_FromString()undPyUnicode_InternInPlace()direkt aufzurufen.
-
unsigned int PyUnicode_CHECK_INTERNED(PyObject *str)¶
Gibt einen von Null verschiedenen Wert zurück, wenn str interniert ist, Null andernfalls. Das Argument str muss eine Zeichenkette sein; dies wird nicht überprüft. Diese Funktion ist immer erfolgreich.
CPython-Implementierungsdetails: Ein von Null verschiedener Rückgabewert kann zusätzliche Informationen darüber enthalten, wie die Zeichenkette interniert ist. Die Bedeutung solcher von Null verschiedenen Werte sowie spezifische Internierungsdetails jeder einzelnen Zeichenkette können sich zwischen CPython-Versionen ändern.
PyUnicodeWriter¶
Die PyUnicodeWriter API kann verwendet werden, um ein Python str-Objekt zu erstellen.
Hinzugefügt in Version 3.14.
-
type PyUnicodeWriter¶
Eine Unicode-Writer-Instanz.
Die Instanz muss entweder mit
PyUnicodeWriter_Finish()bei Erfolg oder mitPyUnicodeWriter_Discard()bei einem Fehler zerstört werden.
-
PyUnicodeWriter *PyUnicodeWriter_Create(Py_ssize_t length)¶
Erstellt eine Unicode-Writer-Instanz.
length muss größer oder gleich
0sein.Wenn length größer als
0ist, wird ein interner Puffer der Größe length Zeichen vorab zugewiesen.Setzt eine Ausnahme und gibt
NULLbei einem Fehler zurück.
-
PyObject *PyUnicodeWriter_Finish(PyUnicodeWriter *writer)¶
Gibt das finale Python
str-Objekt zurück und zerstört die Writer-Instanz.Setzt eine Ausnahme und gibt
NULLbei einem Fehler zurück.Die Writer-Instanz ist nach diesem Aufruf ungültig.
-
void PyUnicodeWriter_Discard(PyUnicodeWriter *writer)¶
Verwirft den internen Unicode-Puffer und zerstört die Writer-Instanz.
Wenn writer
NULList, wird keine Operation durchgeführt.Die Writer-Instanz ist nach diesem Aufruf ungültig.
-
int PyUnicodeWriter_WriteChar(PyUnicodeWriter *writer, Py_UCS4 ch)¶
Schreibt das einzelne Unicode-Zeichen ch in writer.
Bei Erfolg wird
0zurückgegeben. Bei einem Fehler wird eine Ausnahme gesetzt, der Writer unverändert gelassen und-1zurückgegeben.
-
int PyUnicodeWriter_WriteUTF8(PyUnicodeWriter *writer, const char *str, Py_ssize_t size)¶
Dekodiert die Zeichenkette str aus UTF-8 im Strict-Modus und schreibt die Ausgabe in writer.
size ist die Länge der Zeichenkette in Bytes. Wenn size gleich
-1ist, wirdstrlen(str)aufgerufen, um die Zeichenkettenlänge zu ermitteln.Bei Erfolg wird
0zurückgegeben. Bei einem Fehler wird eine Ausnahme gesetzt, der Writer unverändert gelassen und-1zurückgegeben.Siehe auch
PyUnicodeWriter_DecodeUTF8Stateful().
-
int PyUnicodeWriter_WriteASCII(PyUnicodeWriter *writer, const char *str, Py_ssize_t size)¶
Schreibt die ASCII-Zeichenkette str in writer.
size ist die Länge der Zeichenkette in Bytes. Wenn size gleich
-1ist, wirdstrlen(str)aufgerufen, um die Zeichenkettenlänge zu ermitteln.str darf nur ASCII-Zeichen enthalten. Das Verhalten ist undefiniert, wenn str Nicht-ASCII-Zeichen enthält.
Bei Erfolg wird
0zurückgegeben. Bei einem Fehler wird eine Ausnahme gesetzt, der Writer unverändert gelassen und-1zurückgegeben.Hinzugefügt in Version 3.14.
-
int PyUnicodeWriter_WriteWideChar(PyUnicodeWriter *writer, const wchar_t *str, Py_ssize_t size)¶
Schreibt die Wide-Zeichenkette str in writer.
size ist die Anzahl der Wide-Zeichen. Wenn size gleich
-1ist, wirdwcslen(str)aufgerufen, um die Zeichenkettenlänge zu ermitteln.Bei Erfolg wird
0zurückgegeben. Bei einem Fehler wird eine Ausnahme gesetzt, der Writer unverändert gelassen und-1zurückgegeben.
-
int PyUnicodeWriter_WriteUCS4(PyUnicodeWriter *writer, Py_UCS4 *str, Py_ssize_t size)¶
Schreibt die UCS4-Zeichenkette str in writer.
size ist die Anzahl der UCS4-Zeichen.
Bei Erfolg wird
0zurückgegeben. Bei einem Fehler wird eine Ausnahme gesetzt, der Writer unverändert gelassen und-1zurückgegeben.
-
int PyUnicodeWriter_WriteStr(PyUnicodeWriter *writer, PyObject *obj)¶
Ruft
PyObject_Str()für obj auf und schreibt die Ausgabe in writer.Bei Erfolg wird
0zurückgegeben. Bei einem Fehler wird eine Ausnahme gesetzt, der Writer unverändert gelassen und-1zurückgegeben.
-
int PyUnicodeWriter_WriteRepr(PyUnicodeWriter *writer, PyObject *obj)¶
Ruft
PyObject_Repr()für obj auf und schreibt die Ausgabe in writer.Bei Erfolg wird
0zurückgegeben. Bei einem Fehler wird eine Ausnahme gesetzt, der Writer unverändert gelassen und-1zurückgegeben.
-
int PyUnicodeWriter_WriteSubstring(PyUnicodeWriter *writer, PyObject *str, Py_ssize_t start, Py_ssize_t end)¶
Schreibt den Teilstring
str[start:end]in writer.str muss ein Python
str-Objekt sein. start muss größer oder gleich 0 und kleiner oder gleich end sein. end muss kleiner oder gleich der Länge von str sein.Bei Erfolg wird
0zurückgegeben. Bei einem Fehler wird eine Ausnahme gesetzt, der Writer unverändert gelassen und-1zurückgegeben.
-
int PyUnicodeWriter_Format(PyUnicodeWriter *writer, const char *format, ...)¶
Ähnlich wie
PyUnicode_FromFormat(), schreibt die Ausgabe jedoch direkt in writer.Bei Erfolg wird
0zurückgegeben. Bei einem Fehler wird eine Ausnahme gesetzt, der Writer unverändert gelassen und-1zurückgegeben.
-
int PyUnicodeWriter_DecodeUTF8Stateful(PyUnicodeWriter *writer, const char *string, Py_ssize_t length, const char *errors, Py_ssize_t *consumed)¶
Dekodiert die Zeichenkette str aus UTF-8 mit dem Fehlerbehandler errors und schreibt die Ausgabe in writer.
size ist die Länge der Zeichenkette in Bytes. Wenn size gleich
-1ist, wirdstrlen(str)aufgerufen, um die Zeichenkettenlänge zu ermitteln.errors ist ein Name für einen Fehlerbehandler, z.B.
"replace". Wenn errorsNULList, wird der Strict-Fehlerbehandler verwendet.Wenn consumed nicht
NULList, wird *consumed bei Erfolg auf die Anzahl der dekodierten Bytes gesetzt. Wenn consumedNULList, werden unvollständige UTF-8-Byte-Sequenzen am Ende als Fehler behandelt.Bei Erfolg wird
0zurückgegeben. Bei einem Fehler wird eine Ausnahme gesetzt, der Writer unverändert gelassen und-1zurückgegeben.Siehe auch
PyUnicodeWriter_WriteUTF8().
Veraltete API¶
Die folgende API ist veraltet.
-
type Py_UNICODE¶
Dies ist ein Typedef von
wchar_t, das je nach Plattform ein 16-Bit- oder 32-Bit-Typ ist. Bitte verwenden Sie stattdessen direktwchar_t.Geändert in Version 3.3: In früheren Versionen war dies ein 16-Bit- oder ein 32-Bit-Typ, je nachdem, ob Sie zur Build-Zeit eine „schmale“ oder „breite“ Unicode-Version von Python ausgewählt hatten.
Veraltet seit Version 3.13, wird in Version 3.15 entfernt.
-
int PyUnicode_READY(PyObject *unicode)¶
Tut nichts und gibt
0zurück. Diese API wird nur aus Kompatibilitätsgründen beibehalten, es gibt jedoch keine Pläne, sie zu entfernen.Hinzugefügt in Version 3.3.
Veraltet seit Version 3.10: Diese API tut seit Python 3.12 nichts mehr. Zuvor musste sie für jede mit der alten API (
PyUnicode_FromUnicode()oder ähnlich) erstellte Zeichenkette aufgerufen werden.
-
unsigned int PyUnicode_IS_READY(PyObject *unicode)¶
Tut nichts und gibt
1zurück. Diese API wird nur aus Kompatibilitätsgründen beibehalten, es gibt jedoch keine Pläne, sie zu entfernen.Hinzugefügt in Version 3.3.
Veraltet seit Version 3.14: Diese API tut seit Python 3.12 nichts mehr. Zuvor konnte sie aufgerufen werden, um zu prüfen, ob
PyUnicode_READY()notwendig ist.