Ankündigung

Einklappen
Keine Ankündigung bisher.

UTF8 Decode mit TextDecode

Einklappen

Neue Werbung 2019

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

  • UTF8 Decode mit TextDecode

    Hallo,

    von einer API bekomme folgenden String:
    Code:
    Steuererklärung für
    Dargestellt soll werden:
    Code:
    Steuererklärung für
    In PHP macht das:
    PHP-Code:
    var_dump(utf8_decode('Steuererklärung für')); // Steuererklärung für 
    Auf der Suche nach einer Lösung für JS komme ich an diese Klasse TextDecoder und diese TextEncoder.

    Eine Kombination der Methoden beider Klassen soll die Konvertierung des String erledigen:
    Code:
    const string = 'Steuererklärung für';
    const decoder = new TextDecoder();
    const encoder = new TextEncoder();
    const buffer = encoder.encode(string);
    
    console.log(decoder.decode(buffer));
    hier ein fiddle

    Das klappt aber nicht, der String bleibt gleich.

    Eventuell fass ich die Funktionen auch falsch an, jede Hilfe ist Willkommen

  • #2
    Es gibt zwei Möglichkeiten:

    a) Die API liefert Mülldaten.
    b) Die Daten werden von der API falsch ausgelesen.

    Je nachdem was der Fall ist, sieht der Lösungsweg anders aus.

    Deine Versuche bereits kaputte Daten nachträglich zu reparieren ist reine Symptombekämpfung, behebt aber nicht das eigentliche Problem.

    Kommentar


    • #3
      Zitat von hellbringer Beitrag anzeigen
      Es gibt zwei Möglichkeiten:

      a) Die API liefert Mülldaten.
      ...

      Deine Versuche bereits kaputte Daten nachträglich zu reparieren ist reine Symptombekämpfung, behebt aber nicht das eigentliche Problem.
      Nur das Problem der gelieferten Daten anders zu benennen als wie es im der Threaderöffnung schon dargestellt ist, ist kein Lösungsansatz...

      Kommentar


      • #4
        Zitat von rammi Beitrag anzeigen
        Nur das Problem der gelieferten Daten anders zu benennen als wie es im der Threaderöffnung schon dargestellt ist, ist kein Lösungsansatz...
        Wenn die API wirklich fehlerhaft ist, dann wäre die Lösung die API zu reparieren (lassen). Aber in 99% der Fälle ist wohl b) der Fall und dieser Code ist offenbar geheim, den sonst könnte man ihn hier im Thread lesen...

        Kommentar


        • #5
          Zitat von hellbringer Beitrag anzeigen

          ...Aber in 99% der Fälle ist wohl b) der Fall und dieser Code ist offenbar geheim, den sonst könnte man ihn hier im Thread lesen...
          Right

          Kommentar


          • #6
            Tja, dann hast du ein Problem, das ein Forum nicht lösen kann. Wenn Code geheim ist und du keinen äquivalenten Beispielcode zeigen kannst/willst, ist dir nicht zu helfen.

            Kommentar


            • #7
              Zitat von hellbringer Beitrag anzeigen
              Tja, dann hast du ein Problem, das ein Forum nicht lösen kann.
              Es kann nicht gelöst werden? Das heißt ich fasse die oberen JS-Klassen richtig an? mmmmh

              Kommentar


              • #8
                Die API liefert offensichtlich (und vernünfigerweise) UTF8-codierte Daten. Die sollten dann auch als UTF8 weiterverarbeitet werden und nicht mit einer 8-Bit-Kodierung interpretiert werden.

                Kommentar


                • #9
                  Zitat von mephisto111 Beitrag anzeigen
                  Die API liefert offensichtlich (und vernünfigerweise) UTF8-codierte Daten...
                  Richtig, und in der Datenbank liegt schon der falsche String. Ich habe keinen Zugriff auf die DB oder vorgeschaltete Scripte, sondern nur auf das was die API zurückgibt. Alles im allem Stichwort: Legacy-Code

                  Und mit diesen Voraussetzungen such ich nun eine Lösung, wie oben schon erwähnt. Da ist mit sollte oder müsste im Augenblick nicht weiter geholfen.

                  Kommentar


                  • #10
                    Zitat von rammi Beitrag anzeigen
                    Und mit diesen Voraussetzungen such ich nun eine Lösung, wie oben schon erwähnt. Da ist mit sollte oder müsste im Augenblick nicht weiter geholfen.
                    Dafür wirst du wohl iconv oder ein vergleichbares Tool brauchen:

                    https://www.npmjs.com/package/iconv-lite

                    Mit TextEncoder() und TextDecoder() alleine ist es jedenfalls nicht möglich eine kaputte Kodierung zu reparieren, da TextEncoder() davon ausgeht, dass der String korrekte Daten enthält.

                    Mit PHP ist das nicht vergleichbar, da PHP bei Strings keine Zeichenkodierungen kennt, sondern alles binär speichert. JavaScript hingegen speichert Text wirklich als Text und wenn der Text kaputt ist, ist er kaputt.

                    Kommentar


                    • #11
                      [selbst gelöscht]

                      Kommentar


                      • #12
                        Wenn die API saubere UTF8 Daten liefert, musst Du auf der Empfängerseite alles in der korrekten Kollation bereitstellen, ein kleiner Leitfaden ist hier zu finden: https://www.php-rocks.de/thema/98--e...schw-rung.html
                        Competence-Center -> Enjoy the Informatrix
                        PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

                        Kommentar


                        • #13
                          Zitat von fastix Beitrag anzeigen
                          Wobei das eher nicht der Fall sein wird, denn Du sprichst von einer „API“, was mich an JSON denken lässt und da ist UTF-8 der Standard.[/LIST]
                          Also ich denke bei einer API zum Beispiel an SOAP das XML zurückgibt (im Body ) und wo die Codierung angebgeben ist:

                          Code:
                          <?xml version="1.0" encoding="utf-8" standalone="yes"?>
                          sorry, shift-taste kaputt

                          Kommentar

                          Lädt...
                          X