Probleme mit Umlaute in Python

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.
Peter17
User
Beiträge: 6
Registriert: Montag 2. Juni 2025, 09:48
Wohnort: Teningen

Hallo,

habe mir Microsoft Visual-Studio Prof. installiert unter Windows 11 Prof.
Habe Python 3.13.3 installiert und in VS kann ich auch ein neues Projekt in Python erstellen
Bin absoluter Anfänger im Programmieren.
Habe print("Hallo Welt") eingegeben und es läuft.
Habe dann print("Hallo Übermorgen") eingegeben und gestartet und es kommt zur Fehlermeldung wegen UTF8.
Gebe ich das selbe unter CMD ein, so wird die Umlaute richtig ausgegeben.
Wie kann ich das ändern, dass die Ausgabe auch in VS funktioniert?

Danke im voraus
Benutzeravatar
Kebap
User
Beiträge: 772
Registriert: Dienstag 15. November 2011, 14:20
Wohnort: Dortmund

Welche Fehlermeldung kommt denn da?
MorgenGrauen: 1 Welt, 8 Rassen, 13 Gilden, >250 Abenteuer, >5000 Waffen & Rüstungen,
>7000 NPC, >16000 Räume, >200 freiwillige Programmierer, nur Text, viel Spaß, seit 1992.
imonbln
User
Beiträge: 190
Registriert: Freitag 3. Dezember 2021, 17:07

Wie schön @Kebap, geschrieben hat, die konkrete Fehlermeldung wäre hilfreich.

Wenn ich raten müsste, würde ich vermuten, dass das Encoding nicht stimmt. Hat dann wenig mit Python zu tun, sondern eher welches Encoding deine IDE hat und welche die CMD verwendet.
Peter17
User
Beiträge: 6
Registriert: Montag 2. Juni 2025, 09:48
Wohnort: Teningen

der Fehlercode lautet:
SyntaxError: (unicode error) 'utf-8' codec can't decode byte 0xfc in position 6: invalid start byte
nezzcarth
User
Beiträge: 1749
Registriert: Samstag 16. April 2011, 12:47

An der Stelle in der Eingabe steht (anders als in deinem Beispiel) ein kleines ü oder? Das ist nicht Unicode/UTF-8, sondern vmtl. Windows 1252 oder UTF-16-LE. Wenn das in einer Datei steht, musst du die Datei korrekt kodieren, bzw. ggf. deine Software so einstellen, dass der richtige Zeichensatz verwendet wird.
Benutzeravatar
__blackjack__
User
Beiträge: 13996
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Oder einen Coding-Kommentar an den Anfang der Datei schreiben, der die tatsächliche Kodierung der Datei angibt. Aber es spricht IMHO wenig bis gar nichts dafür “bei uns” eine andere Kodierung als UTF-8 zu verwenden.
“The best book on programming for the layman is »Alice in Wonderland«; but that's because it's the best book on anything for the layman.” — Alan J. Perlis
Benutzeravatar
ThomasL
User
Beiträge: 1378
Registriert: Montag 14. Mai 2018, 14:44
Wohnort: Kreis Unna NRW

Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
Peter17
User
Beiträge: 6
Registriert: Montag 2. Juni 2025, 09:48
Wohnort: Teningen

Hallo netzzcarth
es ist ein Großes Ü
Benutzeravatar
__blackjack__
User
Beiträge: 13996
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Peter17: In welcher Kodierung? In der bei uns üblichen Windows-Kodierung CP1252 ist das ein kleines ü:

Code: Alles auswählen

In [13]: b'\xfc'.decode("cp1252")
Out[13]: 'ü'

In [14]: b"\xfc".decode("cp1252") == "Ü"
Out[14]: False
“The best book on programming for the layman is »Alice in Wonderland«; but that's because it's the best book on anything for the layman.” — Alan J. Perlis
Peter17
User
Beiträge: 6
Registriert: Montag 2. Juni 2025, 09:48
Wohnort: Teningen

hallo blackjack,

habe Visual Studio gestartet, Neues Projekt in der Python-Umgebung angelegt.
In der IDE dann einfach Print("Hallo Übermorgen") eingegeben und mit "Starten" ausgeführt.
In der sich öffnend Shell wird der Fehler angezeigt.
Benutzeravatar
__blackjack__
User
Beiträge: 13996
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Peter17: Entweder war das Ü klein geschrieben, oder die Zahl in der Fehlermeldung war anders. Beziehungsweise war die Fehlermeldung bei ``Print`` mit einem grossen P ganz sicher anders.
“The best book on programming for the layman is »Alice in Wonderland«; but that's because it's the best book on anything for the layman.” — Alan J. Perlis
nezzcarth
User
Beiträge: 1749
Registriert: Samstag 16. April 2011, 12:47

So oder so: Ich schlage vor, dass du in den Einstellungen von Visual Studio schaust, welcher Zeichensatz da eingestellt ist und diesen ggf. auf Unicode/UTF-8 setzt.
Benutzeravatar
__blackjack__
User
Beiträge: 13996
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Ah, oder es ist tatsächlich FC für ein grosses Ü wenn eine EBCDIC-Kodierung beim Quelltext verwendet wird: https://de.wikipedia.org/wiki/Extended_ ... EBCDIC_037 😎 So unwahrscheinlich das auch sein mag. Vielleicht wird ja sonst für (historische) Mainframes oder z/OS programmiert.
“The best book on programming for the layman is »Alice in Wonderland«; but that's because it's the best book on anything for the layman.” — Alan J. Perlis
nezzcarth
User
Beiträge: 1749
Registriert: Samstag 16. April 2011, 12:47

@blackjack: Ich finde mittels iconv insgesamt 137 Encodings (einschl. Aliase), die das Ü so kodieren und – soweit ich das sagen kann – alle entweder sehr alt oder auf normalen PCs unüblich sind bzw. meistens beides. Wahrscheinlicher erscheint mir dann doch, dass da eigentlich ein ü steht und Visual Studio auf UTF16-LE gestellt ist, was im Kontext von Windows-Programmierung ja üblich ist und daher noch irgendwie halbwegs plausibel erscheint. Das ist aber nur wild spekuliert. Persönlich würde ich allerdings auch sowieso kein Visual Studio für Python nehmen.
Sirius3
User
Beiträge: 18249
Registriert: Sonntag 21. Oktober 2012, 17:20

@nezzcarth: UTF16 würde gar nicht laufen, weil python beim ersten 0-byte aufhört zu lesen.
nezzcarth
User
Beiträge: 1749
Registriert: Samstag 16. April 2011, 12:47

@Sirius3: Das ist bei dem unter Windows (m.W.n.) üblichen UTF16-LE nicht zwangsläufig der Fall, da hier das fc zuerst kommt (fc00)
EDIT: siehe auch:

Code: Alles auswählen

xxd test.txt
00000000: 4800 6100 6c00 6c00 6f00 2000 fc00 6200  H.a.l.l.o. ...b.
00000010: 6500 7200 6d00 6f00 7200 6700 6500 6e00  e.r.m.o.r.g.e.n.
00000020: 0a00                                     ..

[code]
In [1]: open('test.txt').read()
---------------------------------------------------------------------------
UnicodeDecodeError                        Traceback (most recent call last)
Cell In[1], line 1
----> 1 open('test.txt').read()

File <frozen codecs>:325, in decode(self, input, final)

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xfc in position 12: invalid start byte

In [2]: open('test.txt', encoding='utf-16-le').read()
Out[2]: 'Hallo übermorgen\n'
Zuletzt geändert von nezzcarth am Dienstag 3. Juni 2025, 21:13, insgesamt 1-mal geändert.
Sirius3
User
Beiträge: 18249
Registriert: Sonntag 21. Oktober 2012, 17:20

Es ist völlig egal, ob in der Datei irgendwo ein ü vorkommt, weil der erste Buchstabe von

Code: Alles auswählen

print("Hallo Übermorgen")
ein p ist, und weiter liest python gar nicht.
nezzcarth
User
Beiträge: 1749
Registriert: Samstag 16. April 2011, 12:47

Das trifft meinem Eindruck nach nicht zu, s. mein noch mal korrigierten Edit. Python meckert an Position 12 (allerdings nicht bei 6 wie im Ausgangspost, also habe ich vmtl. doch Unrecht :)), nicht an Position 1.
EDIT:
Ohne ü kann Python das "lesen":

Code: Alles auswählen

In [1]: open('test.txt', encoding='utf8').read()
Out[1]: 'H\x00a\x00l\x00l\x00o\x00 \x00u\x00b\x00e\x00r\x00m\x00o\x00r\x00g\x00e\x00n\x00\n\x00'
Sirius3
User
Beiträge: 18249
Registriert: Sonntag 21. Oktober 2012, 17:20

Hast Du schon versucht, ein UTF16-codiertes Python-Programm auszuführen?
Peter17
User
Beiträge: 6
Registriert: Montag 2. Juni 2025, 09:48
Wohnort: Teningen

Hallo an alle.

Habe Dank Euch den Fehler gefunden.
In Visual Studio habe ich bei GIT/Einstellungen / Umgebung bei Dokumente im Eintrag "Speichern von Dateien mit einer bestimmten Codierung" ein Häkchen gesetzt und "Unicode (UTF-8 ohne Signatur) - Codepage 65001" ausgewählt. Und siehe da.... nun wird das Ü auch korrekt ausgegeben.

Besten Dank an alle für Eure Hilfe
Antworten