Otto Wyss: utf8 Rückwandlung

Ich übergebe einen Dateinamen via AJAX, der dabei utf8 gewandelt wird. Bei der Anzeige des Namens funktioniert das wunderbar, aber die Datei kann so nicht geladen werden. Wie löst man das?

  1. Wie löst man das?

    Indem man den Helfenden mehr als zwei Sätze an die Hand gibt und das Problem genau beschreibt.

    Was hat das Problem mit JavaScript zu tun? Wo und wie willst du welche Datei laden? Serverseitig? Clientseitig? Was heißt laden?

    Mathias

    1. »» Wie löst man das?

      Indem man den Helfenden mehr als zwei Sätze an die Hand gibt und das Problem genau beschreibt.

      Sorry habe den Link vergessen (http://www.orpatec.ch/index.php?page=gallery.php). "Sihlhölzli" ist als Dateiname "Sihlh\u00f6lzli", was natürlich nicht funktioniert.

      1. Hi,

        "Sihlhölzli" ist als Dateiname "Sihlh\u00f6lzli", was natürlich nicht funktioniert.

        Warum verwendest du überhaupt solche Ressourcennamen? Dass das generell ungünstig ist, ist doch bekannt - Beschränkung auf übliche ASCII-Zeichen ist meistens sinnvoll.

        MfG ChrisB

        --
        Light travels faster than sound - that's why most people appear bright until you hear them speak.
        1. @@ChrisB:

          Beschränkung auf übliche ASCII-Zeichen ist meistens sinnvoll.

          Nö. Systeme, die nicht auf ASCII-Zeichen beschränkt sind, sind immer sinnvoll.

          (Oder schreiben wir das Jahr 1970 und sprechen ausschließlich englisch?)

          Live long and prosper,
          Gunnar

          --
          Das einzige Mittel, den Irrtum zu vermeiden, ist die Unwissenheit. (Jean-Jacques Rousseau)
        2. Warum verwendest du überhaupt solche Ressourcennamen? Dass das generell ungünstig ist, ist doch bekannt - Beschränkung auf übliche ASCII-Zeichen ist meistens sinnvoll.

          "ö" ist doch kein so ungewöhnlicher Buchstabe für einen Ordnernamen, oder? Aber da ich immer noch vor dem gleichen Problem stehe, habe ich ihn nun durch "oe" ersetzt.

      2. »» »» Wie löst man das?
        »»
        »» Indem man den Helfenden mehr als zwei Sätze an die Hand gibt und das Problem genau beschreibt.
        »»
        Sorry habe den Link vergessen (http://www.orpatec.ch/index.php?page=gallery.php). "Sihlhölzli" ist als Dateiname "Sihlh\u00f6lzli", was natürlich nicht funktioniert.

        Ist ja auch kein utf8. Ein 'ö' würde da nämlich als C3B6 kodiert. Du hast aber ein 'F6' und das ist ISO-8859.

        Hotte

        --
        Wenn der Kommentar nicht zum Code passt, kann auch der Code falsch sein.
        1. Ist ja auch kein utf8.

          Isses auch nicht, hat mit Kodierung gar nichts mehr zu tun, die passiert auf einer Ebene darunter.

          Ein 'ö' würde da nämlich als C3B6 kodiert. Du hast aber ein 'F6' und das ist ISO-8859.

          Du verwechselst die hexadezimale Unicode-Nummer eines Zeichens mit der Bytesequenz, die das Zeichen ergibt, wenn es mit UTF-8 kodiert wird. Der Server liefert aber nur ASCII-kodiertes JSON.

          \u00f6 ist die korrekte ECMAScript-Escape-Sequenz für das Zeichen ö (U+00F6).

          Mathias

          1. »» Ist ja auch kein utf8.

            Isses auch nicht, hat mit Kodierung gar nichts mehr zu tun, die passiert auf einer Ebene darunter.

            »» Ein 'ö' würde da nämlich als C3B6 kodiert. Du hast aber ein 'F6' und das ist ISO-8859.

            Du verwechselst die hexadezimale Unicode-Nummer eines Zeichens mit der Bytesequenz, die das Zeichen ergibt, wenn es mit UTF-8 kodiert wird. Der Server liefert aber nur ASCII-kodiertes JSON.

            \u00f6 ist die korrekte ECMAScript-Escape-Sequenz für das Zeichen ö (U+00F6).

            Genau, steht ja auch da: UTF-8 (c3, b6) ö (Dein Link)

            Die Seite vom OP hingegen ist kodiert mit ISO-8859-1, was die Kodierung eines 'ö' zu 'f6' (hex) ja auch erklärt. Sofern hier eine Problemstellung vorliegt, hat die nichts mit UTF-8 zu tun.

            Hotte

            --
            Wenn der Kommentar nicht zum Code passt, kann auch der Code falsch sein.
          2. Du verwechselst die hexadezimale Unicode-Nummer eines Zeichens mit der Bytesequenz, die das Zeichen ergibt, wenn es mit UTF-8 kodiert wird. Der Server liefert aber nur ASCII-kodiertes JSON.

            Endlich mal jemand, der das Problem richtig erkannt hat.

            Nochmals, weiss jemand wie man ein UTF8 "äöü" wieder in ein ISO "äöü" clientseitig wandelt, so dass man es in einem "href=" benutzen kann?

            1. Nochmals,

              Wieso nochmals?

              weiss jemand wie man ein UTF8 "äöü" wieder in ein ISO "äöü" clientseitig wandelt, so dass man es in einem "href=" benutzen kann?

              Mit Kodierungen hast du auf der Ebene überhaupt nichts zu schaffen.

              Ein (unkodierten) JavaScript-String mit einem Zeichen "ö" kannst du mit encodeURIComponent in %C3%B6 umwandeln, was du in einer URI verwenden kannst.

              Allerdings darfst du encodeURIComponent nur auf die Zeichen anwenden, die nicht in der URI vorkommen dürfen und maskiert werden müssen.

              Mathias

              1. @@molily:

                Allerdings darfst du encodeURIComponent nur auf die Zeichen anwenden, die nicht in der URI vorkommen dürfen und maskiert werden müssen.

                ?? Warum?

                Allerdings darfst du encodeURIComponent nicht auf den gesamten URI anwenden, sondern nur auf den Teil, wo prozent-codierte Zeichen vorkommen dürfen.

                http://validator.w3.org/check?uri=http%3A%2F%2Fexample.net funktioniert perfekt.

                Live long and prosper,
                Gunnar

                --
                Das einzige Mittel, den Irrtum zu vermeiden, ist die Unwissenheit. (Jean-Jacques Rousseau)
                1. Allerdings darfst du encodeURIComponent nur auf die Zeichen anwenden, die nicht in der URI vorkommen dürfen und maskiert werden müssen.

                  ?? Warum?

                  Wie, »warum«?
                  Weil / sonst zu %2F wird und nicht als Path-Segment-Trenner erkannt wird.

                  Allerdings darfst du encodeURIComponent nicht auf den gesamten URI anwenden, sondern nur auf den Teil, wo prozent-codierte Zeichen vorkommen dürfen.

                  Sag ich ja.

                  http://validator.w3.org/check?uri=http%3A%2F%2Fexample.net funktioniert perfekt.

                  Auch im Path-Segment dürfen meines Wissens Escaped-Zeichen vorkommen.
                  http://validator.w3.org/check?uri=http%3A%2F%2Fexample.net

                  Wenn ich das richtig sehe muss dort aber nur / im Query-String escaped werden, der Rest nicht.

                  Mathias

      3. Sorry, lieber Otto, du kannst hier nicht einfach eine URI hineinwerfen und uns den Rest überlassen. So kannst du nicht mit Hilfe rechnen.

        Offenbar lädst du JSON und bekommst, obwohl der Server die Umlaute korrekt kodiert, komische Sachen heraus. Keine Ahnung, woran das liegt, ich finde mich in diesem Wust nicht zurecht. Nicht umsonst bat ich dich, dein Problem zu beschreiben, und wo du gerade dabei bist, kannst du eine reduzierte Testseite bauen, die das Problem isoliert.

        "Sihlhölzli" ist als Dateiname "Sihlh\u00f6lzli", was natürlich nicht funktioniert.

        Soweit ich das sehe wird das JSON durchaus korrekt dekodiert, also aus Sihlh\u00f6lzli wird in JavaScript wieder Sihlhölzli.
        Dann verwendest du allerdings irgendwo encodeURIComponent, bevor du die Bildadresse zusammebaust. Heraus kommt:
        http://www.orpatec.ch/gallery/FCW%20Turnier%20Sihlh%C3%B6lzli/CIMG0789.JPG
        Das ö ist hier durchaus korrekt kodiert, nur die / sollen nicht kodiert werden.

        Deinen Code schaue ich mir erst dann an, wenn du meinen Bitten entsprochen hast.

        Mathias

  2. Ich übergebe einen Dateinamen via AJAX, der dabei utf8 gewandelt wird. Bei der Anzeige des Namens funktioniert das wunderbar, aber die Datei kann so nicht geladen werden. Wie löst man das?

    man

    SCNR;
    Hotte

    --
    Wenn der Kommentar nicht zum Code passt, kann auch der Code falsch sein.
    1. Ich übergebe einen Dateinamen via AJAX, der dabei utf8 gewandelt wird. Bei der Anzeige des Namens funktioniert das wunderbar, aber die Datei kann so nicht geladen werden. Wie löst man das?

      man

      Man = Mann im eingefahrenen Zustand.

      mfg Beat

      --
      ><o(((°>           ><o(((°>
         <°)))o><                     ><o(((°>o
      Der Valigator leibt diese Fische
    2. Hallo,

      man

      sehr schöner Beitrag, auch wenn ich an manchen Stellen nicht ganz deiner Argumentation folge: "Man" ist gelegentlich angebracht, nämlich wenn man[sic!] verallgemeinern möchte.

      Ach ja, und im Englischen gibt es noch eine zweite, seltenere Methode, das deutsche "man" auszudrücken: Die Verwendung von Passiv-Sätzen (okay, funktioniert im Deutschen auch). It can be done!

      So long,
       Martin

      --
      Zwei Politiker auf dem Weg zum Sitzungssaal: "Was sagten Sie in ihrer Rede neulich noch zur Rentenreform?" - "Nichts." - "Ja, schon klar. Aber wie haben Sie es formuliert?"
      1. Hi,

        Ach ja, und im Englischen gibt es noch eine zweite, seltenere Methode, das deutsche "man" auszudrücken: Die Verwendung von Passiv-Sätzen (okay, funktioniert im Deutschen auch). It can be done!

        wenn wir schon beim Thema sind, warum übersetzt man man im Englischen auch mit Mensch anstatt Mann. zb. Mankind finde ich da immer sehr seltsam.

        Was ich damit meine ist der Ursprung, war da Wort "man" vielleicht früher ausschlisslich dem "Mann" zugedacht und man(ups. hier ist es ja schon wieder) hat das früher nicht mit Mensch übersetzt?

        Pete

        1. Was ich damit meine ist der Ursprung, war da Wort "man" vielleicht früher ausschlisslich dem "Mann" zugedacht und man(ups. hier ist es ja schon wieder) hat das früher nicht mit Mensch übersetzt?

          Pete

          Nein, „man“ hat seinen Ursprung im Latein: „homo“, „humanus“, daraus englisch „human“, „man“. homo bedeutet sowohl „Mann“ als auch „Mensch“, was kulturelle Gründe hat: Im sozialen Leben Roms waren die Akteure in der Regel Männer.

          Alles Gute

          huhu

          1. Nein, „man“ hat seinen Ursprung im Latein: „homo“, „humanus“, daraus englisch „human“, „man“. homo bedeutet sowohl „Mann“ als auch „Mensch“, was kulturelle Gründe hat: Im sozialen Leben Roms waren die Akteure in der Regel Männer.

            Soso, aha, whose next?

            mfg Beat

            --
            ><o(((°>           ><o(((°>
               <°)))o><                     ><o(((°>o
            Der Valigator leibt diese Fische
          2. Hi,

            Nein, „man“ hat seinen Ursprung im Latein: „homo“, „humanus“, daraus englisch „human“, „man“. homo bedeutet sowohl „Mann“ als auch „Mensch“, was kulturelle Gründe hat: Im sozialen Leben Roms waren die Akteure in der Regel Männer.

            ja so meinte ich das. Also war mensch und Mann das Gleicher, während Frau, na ja irgendwas anderes, war. Welcher Idiot hat das geändert?;-)

            Pete