(gelöst) Umlaute mit *.sh Script/Python - Probleme

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    • (gelöst) Umlaute mit *.sh Script/Python - Probleme

      Hallo liebe speziallisten,

      ich habe folgendes Problem.

      Das temp.sh Script ruft das Wetter ab und speichert es in der Datei .temp.info (echo ......)

      Eingebaut im Skin wird das dann Angezeigt. Es gibt aber Probleme mit dem Buchstaben ö...

      In der .temp.info steht z.B. 18°C leicht bewölkt

      Im Skin wird jedoch nur 18°C leicht bew angezeigt. Am Skin liegt es nicht, Zeile ist lang genug.

      Wenn ich den Buchstabe ö in ü ändere dann wird alles angezeigt -> 18°C leicht bewülkt

      Wenn ich die Encoding der Datei .temp.info in UTF-8 ändere, dann funktioniert es auch mit ö.

      Kann man (Wenn ja wie?) es einstellen das die Datei in UTF-8 bleibt, oder das ö in oe umbenannt wird?

      Diese sachen überfordern mich leider.

      Hier die temp.sh:

      #!/bin/sh
      TEMPERATUR=0
      WETTER=0
      GESAMT=0
      TEMPERATUR=$(wget -q -O - google.com/ig/api?weather=06188+landsberg | cut -d"<" -f17 | cut -c14-20 | cut -d'"' -f1)
      WETTER=$(wget -q -O - at.wetter.com/deutschland/landsberg/DE0005992.html | grep "deg text_l temp_w" | sed -e 's/<[^<>]*>//g; /^[ ]*$/d' | sed 's/^[ \t]*//' | cut -d"C" -f2)
      echo $TEMPERATUR'°C '$WETTER > /tmp/.temp.info
      exit 0


      und hier die Converter py Datei:

      # -*- coding: utf-8 -*-

      from Components.Converter.Converter import Converter
      from Components.Element import cached
      from Poll import Poll

      class DodoTemp(Poll, Converter, object):
      TEMP = 1
      TEMP1 = 2

      def __init__(self, type):
      Poll.__init__(self)
      Converter.__init__(self, type)
      self.type = type
      self.poll_interval = 30000
      self.poll_enabled = True
      if (type == "Temp"):
      self.type = self.TEMP
      elif (type == "Temp1"):
      self.type = self.TEMP1

      @cached
      def getText(self):
      textvalue = ""
      if self.type == self.TEMP or self.type == self.TEMP1:
      textvalue = self.tempfile()
      return textvalue

      text = property(getText)

      def tempfile(self):
      temp = ""
      try:
      if self.type == self.TEMP:
      f = open("/tmp/.temp.info", "rb")
      elif self.type == self.TEMP1:
      f = open("/tmp/.temp1.info", "rb")
      temp = f.readline().strip()
      f.close()
      temp = str(temp)
      return temp
      except: pass

      def changed(self, what):
      if what[0] == self.CHANGED_POLL:
      Converter.changed(self, what)


      Vielen Dank.

      Gruß Dodo

      Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von dodo-dk ()

    • Bin gerade unterwegs Heim. Probiere es in 15min.

      Danke

      Edit:

      Ach wozu habe ich VPN :D

      iconv gibt's leider nicht.

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von dodo-dk ()

    • Probiers mal mit

      Quellcode

      1. export LANG=C.UTF-8

      oder

      Quellcode

      1. export LANG=de_DE.UTF-8

      in deinem shellscript
      Alternativ die Systemlocale auf UTF-8 stellen.

      EDIT:
      Wieso dieser Ansatz ?
      Besteht in python nicht die Möglichkeit den Rückgabewert eines Scripts als "Eingabevariable" zu nutzen ? Sprich ein Aufruf der Datei "wetter.sh" aus python heraus ?

      quasi "meine variable = /execute/shell/script/wetter.sh" und diese dann entsprechend mit dem python weiterverarbeiten


      EDIT2: Verdammt, Beitrag speichern vergessen ;)

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von hoschi78 ()

    • Da is was dran .. ja.

      @Eröffner

      Schau dir mal dieses sniplet an... ich denke da geht was ;)

      Quellcode

      1. # python
      2. path='infile.html'
      3. path2='outfile.html'
      4. f= open(path, 'rb')
      5. content= unicode(f.read(), 'gb18030')
      6. f.close()
      7. f= open(path2, 'wb')
      8. f.write(content.encode('utf-16'))
      9. f.close()


      Das umkodieren müsste sich also mit python direkt machen lassen, wenn du weisst, was der Webserver ausspuckt und das müsste sich meines Wissens nach auch per script rausfinden lassen und als Variable einbauen.
    • Was mir jetzt auch grad auffällt...

      Wenn ich den Buchstabe ö in ü ändere dann wird alles angezeigt -> 18°C leicht bewülkt

      Schon n bissi strange... wüsste jetzt ausm Kopf nicht welches encoding ein Ü hat, aber kein Ö.

      Wenn ich die Encoding der Datei .temp.info in UTF-8 ändere, dann funktioniert es auch mit ö.

      Das machst du wie ?

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von hoschi78 ()

    • Original von hoschi78
      Was mir jetzt auch grad auffällt...

      Wenn ich den Buchstabe ö in ü ändere dann wird alles angezeigt -> 18°C leicht bewülkt

      Schon n bissi strange... wüsste jetzt ausm Kopf nicht welches encoding ein Ü hat, aber kein Ö.

      Wenn ich die Encoding der Datei .temp.info in UTF-8 ändere, dann funktioniert es auch mit ö.

      Das machst du wie ?

      Mit einem Editor, bei dem man das Encodeing angeben kann? So würde ich das verstehen.
    • Gut, für mich hört sich das nach manuellem umkodieren der Quelle an, aber da kann uns der Eröffner ja nachher erleuchten.
      Für mich siehts aber so aus, als können man das mit dem Sniplet direkt in Pythin umbiegen, von daher sollte sich der code einfach erweitern und zu voller Funktionalität bringen lassen.... ich nix Ahnung python, ich perl ;)
    • Hi, vielen Dank für die Zahlreichen Antworten, konnte leider nicht früher Antworten.

      Ich muß zugeben, ich verstehe kaum etwas von was Ihr alles spricht, bin kein coder, eher ein Bastler :D




      Probiers mal mit
      code:
      1:
      export LANG=C.UTF-8

      oder
      code:
      1:
      export LANG=de_DE.UTF-8

      Ich habe das mal eingetragen in die *.sh aber es hat nichts geändert.


      Wegen dem Encoding ändern, ich habe das mit dem iPhone und FtpOnTheGo gemacht.

      Gruß Dodo

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von dodo-dk ()

    • Wie ich oben schon geschrieben habe, bin ich nicht wirklich firm in Python, aber gut, versuchen wir es mal so…ändere dein Script von

      Quellcode

      1. def tempfile(self):
      2. temp = ""
      3. try:
      4. if self.type == self.TEMP:
      5. f = open("/tmp/.temp.info", "rb")
      6. elif self.type == self.TEMP1:
      7. f = open("/tmp/.temp1.info", "rb")
      8. temp = f.readline().strip()
      9. f.close()
      10. temp = str(temp)
      11. return temp
      12. except: pass
      Alles anzeigen

      auf

      Quellcode

      1. def tempfile(self):
      2. temp = ""
      3. try:
      4. if self.type == self.TEMP:
      5. f = open("/tmp/.temp.info", "rb")
      6. elif self.type == self.TEMP1:
      7. f = open("/tmp/.temp1.info", "rb")
      8. temp = unicode(f.readline(), 'latin_1')
      9. f.close()
      10. temp = temp.encode('utf_8').strip()
      11. temp = str(temp)
      12. return temp
      13. except: pass
      Alles anzeigen

      und teste das mal. Vllt. klappt es ja.
    • Hi geblubber, habe es probiert, kommt leider ein GreenScreen beim booten.

      File "/usr/lib/enigma2/python/Components/Converter/DodoTemp.py", line 32
      temp = ""
      ^
      IndentationError: expected an indented block


      Trotzdem vielen Dank für deine Mühe.
    • Oh mein Gott, ich werde verrückt. Es funktioniert!!!!

      Ich liebe dich :D

      Ich hatte alles auf die selbe Position eingerückt. Das es auf solche Kleinigkeiten drauf ankommt.

      Vielen vielen Dank!!
      Dateien
      • screenshot.jpg

        (35,15 kB, 166 mal heruntergeladen, zuletzt: )

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von dodo-dk ()

    • Und du sagst du bist nicht fit in Python :D

      Kannst du mir vielleicht erklären was das Snip und der rest macht?

      Stimmt das so ungefähr wie ich es denke?


      def tempfile(self):
      temp = ""
      try:
      if self.type == self.TEMP:
      f = open("/tmp/.temp.info", "rb") # Wenn TEMP dann öffne diese Datei
      elif self.type == self.TEMP1:
      f = open("/tmp/.temp1.info", "rb") # Wenn TEMP1 dann öffne diese Datei
      temp = unicode(f.readline(), 'latin_1') # Lese die Zeile ein mit Encoding latin_1
      f.close() # Beende Datei
      temp = temp.encode('utf_8').strip() # temp wird in utf-8 codiert - was ist strip?
      temp = str(temp) # temp ist ein string ?
      return temp # Ausgabe von temp
      except: pass # keine Ahnung..


      Bitte nicht totlachen :D

      Original von hoschi78
      edit:
      btw.. wann wird das released ? ;)


      In ein paar Stunden wenn du willst.

      Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von dodo-dk ()