Seite 1 von 1

Unicode Character mit Variable anzeigen ??

Verfasst: Samstag 21. August 2021, 13:47
von YAPD
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

Re: Unicode Character mit Variable anzeigen ??

Verfasst: Samstag 21. August 2021, 14:34
von karolus
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.

Re: Unicode Character mit Variable anzeigen ??

Verfasst: Samstag 21. August 2021, 18:04
von YAPD
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

Re: Unicode Character mit Variable anzeigen ??

Verfasst: Samstag 21. August 2021, 18:43
von rogerb
@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}")

Re: Unicode Character mit Variable anzeigen ??

Verfasst: Samstag 21. August 2021, 19:35
von Sirius3
@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}")

Re: Unicode Character mit Variable anzeigen ??

Verfasst: Samstag 21. August 2021, 19:55
von karolus
Hallo
ja ok, macht Sinn.

Re: Unicode Character mit Variable anzeigen ??

Verfasst: Samstag 21. August 2021, 21:03
von DasIch
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.