String von serieller Schnittstelle in UTF8 codieren

  • Hallo zusammen,


    ich beise mir mal wieder die Zähne aus:wallbash:


    Ich bekomme auf der SeriellenSchnittstelle ein Text. Die Codierung dieses Textes kenne ich nicht.


    Ich weiss nur, die Umlaute und ß werden mit diesen Zeichen ] } \ | [ { ~ angezeigt.


    Den Text schreibe ich in eine Textdatei und will diese dann in einem PHP Script einlesen.


    Erstelle ich die Textdatei manuell, geht alles.


    Kommt der Text von der Schnittstelle, sieht die Textdatei optisch zwar gleich aus, im PHP Script werden aber if Vergleiche, Text mit Variable, nicht ausgeführt.


    Wäre super wenn mir jemand helfen könnte.


    Im voraus schon mal vielen Dank!


    Viele Grüße Markus

  • Den Text schreibe ich in eine Textdatei und will diese dann in einem PHP Script einlesen.

    Igitt ;) Hoffentlich meinst du JavaScript, falls nicht solltest du das noch mal überdenken... Zum einen ist der Umweg über eine Textdatei nicht wirklich effektiv, zum anderen blockiert PHP deinen Browser solange es ausgeführt wird.

    Ich bekomme auf der SeriellenSchnittstelle ein Text. Die Codierung dieses Textes kenne ich nicht.

    Python
    1. response = ser.readline().strip().decode("ISO-8859-1")
  • Hallo,


    vielen Dank für deine Hilfe!


    Da ich ein Google-Copy-Paste-Bruder bin ;) hab ich recht wenig Ahnung, und knüpfe mich an ein vorhandenes (wirklich :D ) PHP Projekt an.



    Ich hab deinen Tipp gleich ausprobiert, hatte aber keinen Erfolg, alles wie wennich die Zeile weglassen.


    Muss ich das nochmal in Richtung UTF-8 kodieren?


    Viele Grüße Markus!

  • Gerne! Hier der Quellcode:

  • Laut deinem Shebang willst du python2 verwenden, deine print's sind aber von python3....


    Bitte führe das Script mal mit Python3 aus. Die serialize Geschichte ist mit Python3 nämlich besser geregelt.





    PS: Wie gesagt, deine Vorgehensweise ist sehr beschränkt... Python verwenden um die Serielle Schnittstelle auszulesen, die empfangenen Daten in eine Textdatei schreiben und dann über Python ein PHP-Script zum verarbeiten der Textdatei auszuführen... Broken by Design.

    PPS: Bezgl. deiner 2.Zeile siehe https://www.python.org/dev/peps/pep-0263/

  • Hallo,


    die Datei zum Schreiben wir innerhalb der Endlosschleife geschlossen. Wenn danach noch Daten kommen, crasht das Programm. Das sollte man besser & robuster lösen.


    Gruß, noisefloor

  • Woran siehst Du das? Die Datei wird mit file_out geöffnet, und mit file_out geschrieben, und dann wird file_alarm_out geschlossen. Sind doch zwei verschiedene Dateien...


    Aber hej, es ist Python, das ist toll für Anfänger. Man muss keine Filehandler definieren - und merkt dann nichtmal, dass man eine Datei schließt, die man gar nicht geöffnet hat.

  • Man muss keine Filehandler definieren - und merkt dann nichtmal, dass man eine Datei schließt, die man gar nicht geöffnet hat.

    Bitte was soll das denn jetzt wieder... :-/

    file_out = open("rs232.txt","a")

    file_alarm_out.close()

    Dateiobjekt erstellt, Dateiobjekt in der Schleife geschlossen. Über die Variablennamen sehen wir hinweg, ich gehe von einem Copy-Paste Fehler aus, da file_alarm_out nirgends definiert ist (oder ich es übersehe).

    Sag jetzt nicht, dass blindes Copypaste in Lazarus/FreePascal/Icon/C/whatever _besser_ funktioniert.


    Edit: ich denke, das Script ist gar nicht lauffähig.

    :wink:

  • ...da sind auch noch andere Schreibfehler auf die ich auch nicht weiter eingegangen bin, aus selbem Grund (copy&paste). Spätestens beim tatsächlichen Ausführen hagelts Fehlermeldungen.


    Sowas kann man in egal welcher Programmiersprache nicht machen, darüber brauchen wir uns denk ich nicht weiter unterhalten :wink:

  • Hallo linusg,

    Sag jetzt nicht, dass blindes Copypaste in Lazarus/FreePascal/Icon/C/whatever _besser_ funktioniert.

    Jetzt, wo ich drüber nachdenke. Ja, stimmt! Ich kann mich nicht entsinnen, dass im Lazarus-Forum oder im Dephi-Forum oder in der GIML (Global Icon Mailing List) oder dem Unicon-Pendant jemals eine solche Qualität an wirrem Code wie hier im Python-Unterforum ohne Code-Verständnis wild herum kopiert und dann noch gepostet wurde. Mein persönlicher Eindruck ist der, dass Nutzer anderer Programmiersprachen diese erst einmal richtig lernen, bevor sie andere Leute mit Code und ihren Erstlingswerken behelligen. Und Code, der wie hier in Python bei fast allen Beiträgen aus reiner C&P-Mentalität (Copy & Paste) zu entspringen scheint, ist mir in anderen Foren in diesem Umfang noch nicht begegnet. Wie gesagt, ist mein persönlicher Eindruck, der auch gut täuschen kann.


    Glücklicherweise beschäftigen wir uns in der GIML mit "wahren" Programmierproblemen - nicht mit CPPA (Copy&Paste-Programmierungs-Artefakten). Da liegt glücklicherweise auch das Programmierverständnis aller Beteiligten auf einem anderen Niveau.


    Timm Thaler : Nicht entmutigen lassen!



    Beste Grüße


    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    • Icon-Tutorials (IDE: Geany) - GPIO-Library - µController-Programmierung in Icon! - ser. Devices - kein Support per PM / Konversation

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

  • Bei allem nötigen Respekt Andreas ... Keine Ahnung was Dir wieder über die Leber gelaufen ist weshalb du dich hier derart über irgendwelche Foren oder Beitrags-Qualitäten bzgl. Python äußerst, aber dein Beitrag verfehlt das bisher geschriebene dermaßen brutal dass es schon weh tut.


    Wie es scheint nutzt ihr jede Gelegenheit, euch über eine Programmiersprache die ihr nicht leiden könnt, sprichwörtlich auszukotzen. Allmählich könntet ihr's auch mal gut sein lassen.


    Ansonsten mal darüber nachdenken ob das was du allg. der Python Sprache zu lasten legst auch einfach nur daran liegen könnte dass blutige Anfänger sich nicht an C & Co trauen, somit auch keine copy&paste Orgie vollziehen können, oder Du schlicht nicht alle Foren in dein Urteil miteinbeziehst. Vielleicht ist in den anderen Foren/Unterforen auch einfach zu wenig los um einen tatsächlichen Vergleich ziehen zu können...


    In diesem Sinne - back to Topic please.

  • Über die Variablennamen sehen wir hinweg, ich gehe von einem Copy-Paste Fehler aus

    Was soll denn das für ein Copy&Paste Fehler sein, der zwischendrin ein _alarm wegläßt oder dazudichtet?


    Ich hab meinen Code im Editor stehen, ich markiere den Code komplett, ich kopiere den Code, ich füge den Code hier ein.


    Sag jetzt nicht, dass blindes Copypaste in Lazarus/FreePascal/Icon/C/whatever _besser_ funktioniert.

    FPC würde Dir eine Fehlermeldung bringen, dass Dein Filehandler nicht exisiert. So wie bei jeder Variable, die Du anders schreibst, also Du vorher definiert hast.


    Ich weiss nicht, was Python hier macht, aber ich nehme nicht an, dass es die Datei schließt, die file_out zugewiesen wurde. Und ehrlich, ich hab jetzt auch keine Lust, das auszuprobieren.

  • Das hat nichts mit Python zu tun. Völlig sinnlose Diskussion die ihr hier gerade vom Zaun tretet, herschaftszeitennochmal :fluchen:


    Ich geh gleich ins C/C++ Unterforum, dichte mir irgendeinen Code zusammen und beschimpfe anschließend dieses drecks C/C++ wie unfähig diese dämliche Programmiersprache doch sei - dann befände ich mich auf gleichem Niveau wie ihr zwei

  • FPC würde Dir eine Fehlermeldung bringen, dass Dein Filehandler nicht exisiert. So wie bei jeder Variable, die Du anders schreibst, also Du vorher definiert hast.


    Ich weiss nicht, was Python hier macht, aber ich nehme nicht an, dass es die Datei schließt, die file_out zugewiesen wurde. Und ehrlich, ich hab jetzt auch keine Lust, das auszuprobieren.

    Dauert ja auch so lange :fies:

    Code
    1. $ python3 -c "file_alarm_out.close()"
    2. Traceback (most recent call last):
    3. File "<string>", line 1, in <module>
    4. NameError: name 'file_alarm_out' is not defined
    5. $

    Bitte. Hört. Endlich. Auf. Es. Nervt.

    dann befände ich mich auf gleichem Niveau wie ihr zwei

    Ich komme mit, und gehe mal schwer davon aus, das du hier nicht mich sondern A. und T. meinst... :stumm:

    :wink:

  • [Blocked Image: https://media.giphy.com/media/XsUtdIeJ0MWMo/source.gif]


    Andreas


    Wenn der Raspberry Pi - Raspberry II heissen würde, und das II für Icon Interpreter stehen würde, dann hättest du hier ein buntes zusammengewürfteltes Icon Copy+Paste Massaker - Garantiert. Leider steht das Pi für Python Interpreter und so leben wir mit den Auswüchsen.


    Timm Thaler

    du bist das nervigste (aus Adminsicht) seit den meigrafd-jar Kriegen von 2014/2015. Der Erste Teil deines Post war vollkommen berechtigt, aber dann schwadronierst du wieder rumund beabsichtigst nichts anderes ausser Streit zu provozieren.


    Ich werde hier nichts löschen, sonst bin ich wieder der Arsch der zensiert.

    Der Unterschied zwischen Genie und Wahnsinn definiert sich im Erfolg.

  • Wenn hier jemand Code postet, dann gehe ich davon aus, dass er den Code postet, den er selbst im Editor hat - woher auch immer zusammenkopiert - und selbst mal hat laufen lassen. Scheint ja auch so zu sein, denn ein Teil seines Programmes scheint ja zu laufen.


    Dann gehe ich davon aus, dass er den Code so postet, wie er ihn da stehen hat und nicht zwischendurch irgendwas verändert.


    Also wo bitte soll da ein Copy&Paste-Fehler reinkommen, der nicht im laufenden Code schon drin war? Und wenn er im laufenden Code drin war, und eine Fehlermeldung bringen würde, sollte das den TO aufgefallen sein, bevor er den Code hier postet.


    Andererseits wird der close-Code wahrscheinlich nie ausgeführt, weil da auf ein response verglichen wird. Da sehe ich aber auch nicht, wo das herkommt.


    Und dann wiederum scheint es gar nicht der eigentliche Code zu sein, der TO schreibt am Anfang was von nicht funktionierenden Textvergleichen, hier gibt es aber keine Textvergleiche.

  • Code
    1. $ python3 -c "file_alarm_out.close()"
    2. Traceback (most recent call last):
    3. File "<string>", line 1, in <module>
    4. NameError: name 'file_alarm_out' is not defined
    5. $

    Wenn der Interpreter an der Stelle ankommt? Oder schon vorher?


    Mir scheint, der Teil mit close wird eh nie ausgeführt.

  • Wenn der Interpreter an der Stelle ankommt? Oder schon vorher?

    Erst wenn der Interpreter dort ankommt, also der Codeblock tatsächlich ausgeführt wird. Insofern hast du mit

    Mir scheint, der Teil mit close wird eh nie ausgeführt.

    vermutlich recht. Weil es so schön anschaulich ist, noch ein Schnipsel hinterher:

    Python
    1. >>> def foo():
    2. ... return
    3. ... print(does_not_exist)
    4. ...
    5. >>> foo()
    6. >>>

    Ich will mich mit dem Thread aber gar nicht weiter beschäftigen, das ist mir zu albern. Nicht wegen dir, Python-Bashing darf gerne im Thread von Dirk weitergeführt werden. Sondern weil der TE uns hier ominösen Code vorsetzt, den er vermutlich weder verstanden noch selbst geschrieben hat. Zu wenige Basics, das wird seeehr langwierig.

    :wink: