printf macht Probleme

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
tomycat
User
Beiträge: 26
Registriert: Samstag 31. August 2019, 15:27

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.
Sirius3
User
Beiträge: 17757
Registriert: Sonntag 21. Oktober 2012, 17:20

Warum willst Du denn printf benutzen?
Das Problem ist hier, dass ctypes den Unicode-String automatisch in UTF16 konvertiert, printf aber nicht UTF16 erwartet.
tomycat
User
Beiträge: 26
Registriert: Samstag 31. August 2019, 15:27

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?
Sirius3
User
Beiträge: 17757
Registriert: Sonntag 21. Oktober 2012, 17:20

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.
tomycat
User
Beiträge: 26
Registriert: Samstag 31. August 2019, 15:27

ABER WAS MACHT HIER PYTHON 2.5 ANDERS ?
:-)
Benutzeravatar
__blackjack__
User
Beiträge: 13121
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@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.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Antworten