Unicode Character mit Variable anzeigen ??

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Benutzeravatar
YAPD
User
Beiträge: 120
Registriert: Dienstag 27. Juli 2021, 23:23
Wohnort: Frankfurt am Main

Hallo Zusammen,

ich habe heute eine kleine Frage bezüglich des Umgangs mit Unicode,
bzw. Strings :

Und zwar kann mir jemand erklären bitte, warum bei diesem Code :

Code: Alles auswählen

unicode_character = r'\u' + '003C'
print(f"Unicode Character '<' : {unicode_character}")
nicht das Zeichen so angezeigt wird, wie hier :

Code: Alles auswählen

t = "\u003C" 
print(f"Unicode Character '<' : {t}")


Ich habe schon verschiedene Szenarien probiert, u.a. in
str( ) umgewandelt, aber ich komm einfach nicht drauf.
Der Type sagt auch <str> ...

Vielen Dank im Voraus !

VG
YAPD
-----
Yet Another Python Developer
karolus
User
Beiträge: 144
Registriert: Samstag 22. August 2009, 22:34

Weil im Normalfall '\u…' als escape-sequence interpretiert wird, die dem Interpreter mitteilt: gebe das zu dem hexadezimalen Wert der nächsten 4, passende Zeichen zurück.
als Raw-String mit vorangestelltem r'…' wird eben garnichts interpretiert.
Benutzeravatar
YAPD
User
Beiträge: 120
Registriert: Dienstag 27. Juli 2021, 23:23
Wohnort: Frankfurt am Main

karolus hat geschrieben: Samstag 21. August 2021, 14:34 Weil im Normalfall '\u…' als escape-sequence interpretiert wird, die dem Interpreter mitteilt: gebe das zu dem hexadezimalen Wert der nächsten 4, passende Zeichen zurück.
als Raw-String mit vorangestelltem r'…' wird eben garnichts interpretiert.
Ok, das verstehe ich, aber wenn ich es nicht voranstelle, muss ich
ja doppelte Backslashes benutzen, was dann dazu führt, dass nur
der Text ' \u003C' ausgegeben wird, nicht das ASCII Zeichen '<'.

Wie kriege ich es hin, dass er die 2 Strings erst zusammenführt,
und anschließend die Escape Sequenz mit \uXXXX ausführt bzw.
interpretiert ??

VG
YAPD
-----
Yet Another Python Developer
rogerb
User
Beiträge: 878
Registriert: Dienstag 26. November 2019, 23:24

@YAPD,

ich denke \u003a mach nur Sinn als Ganzes: \u bedeutet: Achtung die nächsten 4 Stellen sind Unicode. Man kann das also nicht einzeln verwenden.

Was aber geht ist das:

Code: Alles auswählen

unicode_character = chr(0x003c)
print(f"Unicode Character '<' : {unicode_character}")
Sirius3
User
Beiträge: 18274
Registriert: Sonntag 21. Oktober 2012, 17:20

@karolus: nein, der Interpreter (oder besser die Virtuelle Maschine) bekommt das gar nie zu Gesicht. Das verarbeitet schon ganz zu Anfang der Parser, der dann nur ein Zeichen als String speichert, deshalb ist eine falsche \u-Sequenz auch ein SyntaxError.
Wenn man Variablen in einem String ersetzen möchte, dann macht man das per Formatstring:

Code: Alles auswählen

character = 0x3c
print(f"Unicode 0x{character:04x}: {character:c}")
karolus
User
Beiträge: 144
Registriert: Samstag 22. August 2009, 22:34

Hallo
ja ok, macht Sinn.
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Sirius3 hat geschrieben: Samstag 21. August 2021, 19:35 @karolus: nein, der Interpreter (oder besser die Virtuelle Maschine) bekommt das gar nie zu Gesicht. Das verarbeitet schon ganz zu Anfang der Parser, der dann nur ein Zeichen als String speichert, deshalb ist eine falsche \u-Sequenz auch ein SyntaxError.
Dies ist übrigens auch dokumentiert.
Antworten