Ankündigung

Einklappen
Keine Ankündigung bisher.

Zeichencodierung Umlaute beim Zurücklesen eines sockets

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    [HS-Logik] Zeichencodierung Umlaute beim Zurücklesen eines sockets

    Hallo an euch,

    ich arbeite an einer Ansteuerung eines Denon Heos Amps mithilfe des Homeservers. Auf Basis des Bausteines von Grot Gebäudeautomation setze ich eine selbst entwickelte HS Logik für die Mediensteuerung ein. Ich setze den Experten 4.9 und einen Homeserver i22 ein.

    Dafür generiere ich JSON commands. Diese sende und empfange ich erfolgreich mittels sockets

    Vereinfacht:
    Code:
    # create socket
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    # connect
    s.connect((ip, port))
    # send command
    s.send(command.encode('ASCII') + b'\r\n')
    # receive data
    data = s.recv(BufferSize)
    Wenn ich jetzt allerdings z.B. Radiosender mit Umlauten auslesen möchte, dann werden diese nicht korrekt am iPhone / QuadClient angezeigt. Auf dem Android Tablet allerdings schon.
    Es würde mich auch schon reichen die Umlaute zu ersetzen. zb 'ö' durch 'oe'.

    Anzeige am Quad Client (Anmerkung: Das R bei KxxxRnten ist in Großbuchstaben, weil ich die string.title() Funktion nach der Textaufbereitung verwende - das sollte bei korrekter Darstellung eines 'ä' nicht mehr auftreten):

    texte fehlanzeige.JPG

    Ich habe nun schon verschiedenste Varianten zur Codierung/Dekodierung (ASCII, UTF-8, UTF16, UTF32, ISO???) oder auch Ersetzung erfolglos ausprobiert. Einiges wurde problemlos im Simulator/HS ausgeführt - einiges nicht - obwohl es in einer Python Umgebung lief.


    In der Testumgebung des SDKs funktionieren manche Varianten - am realen HS/Quadclient/iPhone nicht.

    texte ersetzen.JPG

    Code:
    radio_station_name = radio_station_name.replace('\xe2\x94\x9c\xc3\xa4', 'Ae')
    radio_station_name = radio_station_name.replace('\xe2\x94\x9c\xc3\xbb', 'Oe')
    radio_station_name = radio_station_name.replace('\xe2\x94\x9c\xc2\xa3', 'Ue')
    radio_station_name = radio_station_name.replace('\xe2\x94\x9c\xc3\xb1', 'ae')
    radio_station_name = radio_station_name.replace('\xe2\x94\x9c\xc3\x82', 'oe')
    radio_station_name = radio_station_name.replace('\xe2\x94\x9c\xe2\x95\x9d', 'ue')
    radio_station_name = radio_station_name.replace('\xe2\x94\x9c\xc6\x92', 'ss')
    Hinsichtlich des Ersetzens habe ich, neben der stupiden Ersetzung durch Umlaute und Sonderzeichen laut Konsolenausgabe, schon folgende Varianten probiert:

    Code:
    #V1
    #ä    \xc3\x83\xc2\xa4
    #ö    \xc3\x83\xc2\xb6
    #ü    \xc3\x83\xc2\xbc
    
    #Ü    \xc3\x83\xc5\x93/
    #Ö    \xc3\x83\xe2\x80\x93
    #ß    \xc3\x83\xc5\xb8/
    
    #V2
    #ä    \xc3\xa4
    #ö    \xc3\xb6
    #ü    \xc3\xbc
    #Ä    \xc3\x84
    #Ö    \xc3\x96
    #Ü    \xc3\x9c
    #ß    \xc3\x9f
    
    #V3
    #Ä    \xe2\x94\x9c\xc3\xa4
    #Ö    \xe2\x94\x9c\xc3\xbb
    #Ü    \xe2\x94\x9c\xc2\xa3
    #ä    \xe2\x94\x9c\xc3\xb1
    #ö    \xe2\x94\x9c\xc3\x82
    #ü    \xe2\x94\x9c\xe2\x95\x9d
    #ß    \xe2\x94\x9c\xc6\x92
    Auch mit der Urllib(2) habe ich bereits "unquote" ausprobiert.

    Ebenfalls habe ich bereits versucht mit dem Homeserver Projektoptionen z.B. das ASCII Zeichen 0xC3 bei eingehenden HTTP Telegrammen, welches anscheinend bei einem 'ä' angezeigt wird zu entfernen. Ohne Erfolg.

    Am liebsten wäre mir natürlich eine Lösung in Python.
    Vielleicht hat ja von euch einer eine Idee

    Schöne Grüße und Vielen Dank im Voraus
    Gerald
    Zuletzt geändert von Bollwing; 27.11.2019, 02:32.

    #2
    Hallo,

    ich habe bei dem Thema mich nicht locker gelassen. Allerdings habe ich es nach wie vor nicht hinbekommen die Sonderzeichen zu ersetzen. Auch das Suchen nach ASCII Zeichen/Codierungen brachte nichts. man müsste halt irgendwie hinein debuggen können und die realen Werte/Repräsentationen der Zeichen ausfindig machen zu können.

    Ich habe jetzt als Workaround einen Regular Expression Parser gebaut, welcher eine Liste von Ersetzungen als Input erhält. Damit habe ich vorerst das gewünschte Ergebnis erreicht. Das hat leider den Nachteil, dass man später, bei Änderung der Favoriten oder Umbenennung der Quellen, weitere Worte einpflegen muss.

    lg
    Gerald

    Kommentar

    Lädt...
    X