Ergebnis 1 bis 4 von 4
-
06.03.2022, 19:21 #1
- Registriert seit
- 10.08.2020
- Ort
- Pfalz / Palatinate
- Beiträge
- 2.615
- Thanks (gegeben)
- 1794
- Thanks (bekommen)
- 2415
- Total Downloaded
- 56,91 MB
- Total Downloaded
- 56,91 MB
Box 1:GigaBlue UHD UE 4k Cable (openATV 7.4)Box 2:Mut@nt HD51 4k Cable (oATV DEVEL)Umlaute in STRINGS von externen Quellen
Hallo Zusammen,
ein Thema was bei Programmierungen rund um openATV & ENIGMA2 wohl gar nicht auftaucht, ist das Handling von verkorksten Umlauten. Innerhalb der E2-Welt herrscht relative Harmonie.
Ganz anders aber, wenn Plugins auf externe Quellen zugreifen oder "exotische" Funktionen nutzen müssen, die nicht so ganz astreine Rückergebnisse liefern. Es ist schon schwer genug diese "Vögel" wieder einzufangen, aber das dann noch gleichsam für Python2 und Python3...
Hier mal ein paar Beispiele, die mir schon über den Weg gelaufen sind:
Es geht um STRINGs wie diese (Mixup von UTF-8 und Unicode): 'Z\xc3\xa4hlt nicht in K\xc3\xb6ln, nur bei H \u0026 M.'
Die Krönung: "Der Wolf im Schafspelz", also ein STRING, der optisch aussieht wie ein BYTESTRING: "b'Z\xc3\xa4hlt nicht in K\xc3\xb6ln, nur bei H \u0026 M.'" aber kein BYTESTRING ist!
Die Lösung mit einem Rattenschwanz (der Python2-Teil kann hierbei leicht erkannt & ggf. entfernt werden):
Code:# -*- coding: utf-8 -*- from six import PY3 def UnescapeUNI(text): return (text.encode('latin-1').decode('utf-8') if PY3 else text.decode('unicode_escape').encode('latin-1')).replace("b'", "", 1).rstrip('\'') text = 'Z\xc3\xa4hlt nicht in K\xc3\xb6ln, nur bei H \u0026 M.' print(UnescapeUNI(text)) text = "b'Z\xc3\xa4hlt nicht in K\xc3\xb6ln, nur bei H \u0026 M.'" print(UnescapeUNI(text))
Und dann gehts noch um STRINGs wie diese (inkorrekt gecodetes UTF-8): 'Nachtisch & Süssspeisen' und "b'Nachtisch & Süssspeisen'"
Die Lösung mit einem Rattenschwanz (der Python2-Teil kann hierbei leicht erkannt & ggf. entfernt werden):
Code:# -*- coding: utf-8 -*- from six import PY3 def UnescapeUTF(text): return (text.encode('latin-1').decode('utf-8') if PY3 else text.decode('utf-8').encode('latin-1')).replace("b'", "", 1).rstrip('\'') text = 'Nachtisch & Süssspeisen' print(UnescapeUTF(text)) text = "b'Nachtisch & Süssspeisen'" print(UnescapeUTF(text))
Wird vielleicht dem Einen oder anderen mal helfen und Zeit sparen, wenn er diesen Artikel auf seiner Suche findet...
Gruß.....Mr.ServoGeändert von Mr.Servo (07.03.2022 um 18:35 Uhr) Grund: auf .replace("b'", "", 1).rstrip('\'') verbessert
-
Danke - 1 Thanksörlgrey bedankten sich
-
Advertising
-
07.03.2022, 11:47 #2geeeeeGast
Hi Mr.Servo
ich bin mit Python wenig vertraut, aber ich habe l/rstrip kennengelernt.
Wenn man ".replace("b'", "").replace("'", "")" durch ".replace("b'", "").rstrip('\'')" ersetzen würde, ware vielleicht besser!?
Zur Krönung: Bei Python3 gibt es eine Sache mit "bytestring", ist das deswegen vielleicht ein PY3 spezifisches Problem?
Gruß geeeeeGeändert von geeeee (07.03.2022 um 11:58 Uhr)
-
Danke - 1 ThanksMr.Servo bedankten sich
-
07.03.2022, 18:34 #3
- Registriert seit
- 10.08.2020
- Ort
- Pfalz / Palatinate
- Beiträge
- 2.615
- Thanks (gegeben)
- 1794
- Thanks (bekommen)
- 2415
- Total Downloaded
- 56,91 MB
- Total Downloaded
- 56,91 MB
ThemenstarterBox 1:GigaBlue UHD UE 4k Cable (openATV 7.4)Box 2:Mut@nt HD51 4k Cable (oATV DEVEL)Hi geeeee,
hast Recht, daran hatte ich noch gar nicht gedacht. Habe es oben gleich mal verbessert! Danke Dir dafür!!!
Aufgrund Deiner netten Anregung habe ich als Steigerung folgendes eingebaut: .replace("b'", "", 1).rstrip('\'')
Somit rasiert er die Zeichenfolge "b'" genau nur einmal, der folgende String wird dann bezüglich "b'" nicht mehr verändert.
Der Bytestring ist hier nicht das Thema, denn es war kein Bytestring (z.B. b'Hallo') sondern ein normaler String "b'Hallo'", der einfach nur so aussah. Kleiner aber feiner Unterschied...
Gruß.....Mr.Servo
-
07.03.2022, 20:13 #4geeeeeGast
Schön. Gerne.
Also wenn du dir sicher bist, dass das (z.B. b'Hallo') auch unter PY2 vorkommt, möchte ich hier kein Fass auf machen OK?
Aber neu in Version 3.9 .removeprefix('\'b').Geändert von geeeee (08.03.2022 um 13:05 Uhr)
Lesezeichen