Seite 1 von 1

printf macht Probleme

Verfasst: Samstag 17. April 2021, 17:57
von tomycat
hallo,
ich lese gerade ein älteres Buch, was mir sehr wichtig ist.

Mit Python 2.5 geht der Code, aber nicht mit 3.3
Was muss ich ändern, dass die Ausgabe funkt?

Code: Alles auswählen

from ctypes import *

msvcrt = cdll.msvcrt
message_string = "hello, World!\n"
msvcrt.printf("Test:: %s", message_string)
Mit 2.5 wird mir:
Test:: hello, World
ausgegeben mit 3.3 NUR ein
T
sprich erster Buchstabe.

Re: printf macht Probleme

Verfasst: Samstag 17. April 2021, 18:02
von Sirius3
Warum willst Du denn printf benutzen?
Das Problem ist hier, dass ctypes den Unicode-String automatisch in UTF16 konvertiert, printf aber nicht UTF16 erwartet.

Re: printf macht Probleme

Verfasst: Samstag 17. April 2021, 19:08
von tomycat
Mit dem Beispiel will man demostrieren, dann man in python eine C Funktion ausführen.
1.Aber warum funkt das in python 2.5 ?
2. Was müsste man ändern?

Re: printf macht Probleme

Verfasst: Samstag 17. April 2021, 19:22
von Sirius3
Wer ist ›man‹?
Und es demonstriert nur, dass es schwierig ist, die Funktion richtig zu benutzen.
›printf‹ pinselt halt direkt was in die Windowskonsole, muß also im richtigen Encoding übergeben werden.

Re: printf macht Probleme

Verfasst: Samstag 17. April 2021, 20:02
von tomycat
ABER WAS MACHT HIER PYTHON 2.5 ANDERS ?
:-)

Re: printf macht Probleme

Verfasst: Samstag 17. April 2021, 20:22
von __blackjack__
@tomycat: ”Zeichenketten”. In Python 2 übergibst Du eine Folge von Bytes, in Python 3 eine Zeichenkette. ``"something"`` bedeutet in Python 2 was anderes als in Python 3. In beiden heisst der Typ `str` ist aber etwas anderes. In Python 2 hatte man `str` und `unicode` was in Python 3 zu `bytes` und `str` geworden ist.