Chris82: ISO-8859-1 Sonderzeichen konvertieren

Hi Leutz,

ich stehe gerade irgendwie auf dem Schlauch: Ich habe einen ISO-8859-1 kodierten String:

"Babelsberger Stra\u00dfe"

Nun möchte ich, dass das "\u00df" wieder korrekt als "ß" angezeigt wird. Welche Funktion muss ich dazu verwenden?

Greetz
Chris

  1. Moin Chris82,

    ich stehe gerade irgendwie auf dem Schlauch: Ich habe einen ISO-8859-1 kodierten String:

    "Babelsberger Stra\u00dfe"

    Naja, ob das jetzt latin1 ist, sei dahin gestellt.

    Nun möchte ich, dass das "\u00df" wieder korrekt als "ß" angezeigt wird. Welche Funktion muss ich dazu verwenden?

    Da ist nichts eingebaut. Du könntest dir mit pack() und preg_replace() was bauen, vielleicht so:

      
    function replace_unicode($str) {  
      $packed = pack('H*', $str[1]);  
      return mb_convert_encoding($packed, 'UTF-8', 'UCS-2BE');  
    }  
      
    $str = preg_replace_callback('/\\\\[uU]([0-9a-fA-F]{4})/', 'replace_unicode', $str);  
    
    

    LG,
     CK

  2. @@Chris82:

    nuqneH

    ich stehe gerade irgendwie auf dem Schlauch: Ich habe einen ISO-8859-1 kodierten String:
    "Babelsberger Stra\u00dfe"

    Woher? Warum steht dort '\u00df' anstatt 'ß'? Du solltest das beheben, dass 'ß' überhaupt escapet wird.

    Nun möchte ich, dass das "\u00df" wieder korrekt als "ß" angezeigt wird. Welche Funktion muss ich dazu verwenden?

    http://stackoverflow.com/questions/2934563/how-to-decode-unicode-escape-sequences-like-u00ed-to-proper-utf-8-encoded-char

    Qapla'

    --
    Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
    (Mark Twain)
    1. @@Chris82:

      nuqneH

      ich stehe gerade irgendwie auf dem Schlauch: Ich habe einen ISO-8859-1 kodierten String:
      "Babelsberger Stra\u00dfe"

      Woher? Warum steht dort '\u00df' anstatt 'ß'? Du solltest das beheben, dass 'ß' überhaupt escapet wird.

      Nun möchte ich, dass das "\u00df" wieder korrekt als "ß" angezeigt wird. Welche Funktion muss ich dazu verwenden?

      http://stackoverflow.com/questions/2934563/how-to-decode-unicode-escape-sequences-like-u00ed-to-proper-utf-8-encoded-char

      Qapla'

      Klasse, das ist genau das was ich gesucht habe. Übrigens handelt es sich um einen JSON-String. Theoretisch könnte man dies, wie in einer anderen Antwort bereits erwähnt, auch mit json_decode bewerkstelligen. Allerdings hat mein JSON-String den Aufbau

      {"Key1":"Wert1"},{"Key2":"Wert2"}

      Damit kommt json_decode nicht klar. Ich müsste den String anscheinend erst in einzelne json_string zerlegen. Also

      {"Key1":"Wert1"}
      {"Key2":"Wert2"}

      Vielleicht hat ja jemand noch einen Tip, wie es vielleicht auch anders geht? :-)

      Greetz
      Chris

      1. Moin Chris82,

        Allerdings hat mein JSON-String den Aufbau

        {"Key1":"Wert1"},{"Key2":"Wert2"}

        Damit kommt json_decode nicht klar.

        Ist auch kein korrektes JSON.

        Vielleicht hat ja jemand noch einen Tip, wie es vielleicht auch anders geht? :-)

        Generiere korrektes JSON, z. B.:

        [{"Key1":"Wert1"},{"Key2":"Wert2"}]

        LG,
         CK

        1. Moin Chris82,

          Allerdings hat mein JSON-String den Aufbau

          {"Key1":"Wert1"},{"Key2":"Wert2"}

          Damit kommt json_decode nicht klar.

          Ist auch kein korrektes JSON.

          Vielleicht hat ja jemand noch einen Tip, wie es vielleicht auch anders geht? :-)

          Generiere korrektes JSON, z. B.:

          [{"Key1":"Wert1"},{"Key2":"Wert2"}]

          LG,
          CK

          Klasse, besten Dank :-)
          Zu meiner Verteidigung muss ich sagen, dass der json-string mir so vorgegeben wird und nicht von mir kommt. Wusste nur nicht, dass man das ganze dann einfach in eckige Klammern setzen kann :-)

  3. Hi!

    ich stehe gerade irgendwie auf dem Schlauch: Ich habe einen ISO-8859-1 kodierten String:
    "Babelsberger Stra\u00dfe"

    Woher bekommst du denn solche Strings? Ist das JSON? Wenn die Anführungszeichen zum Transportformat, nicht aber zu den Daten gehören, bekommt man das mit json_decode() in einen UTF-8-kodierten String. Wenn das kein JSON ist, solltest du mal sehen, ob du beim Sender ein geläufigeres Format verwenden kannst. Was da zu empfehlen ist, hängt davon ab, was woher nach wohin übertragen werden soll.

    Lo!

    1. Hi!

      ich stehe gerade irgendwie auf dem Schlauch: Ich habe einen ISO-8859-1 kodierten String:
      "Babelsberger Stra\u00dfe"

      Das ist doch scheinbar ein zwei-Byte-Code, gehört also gar nicht zu ISO-8859-1.

      Ich habe bei mir im Editor einige Makros hinterlegt, die z.B. aus """ (drei Gänsefüßchen oben) „ (ein Gänsefüßchen unten) machen. Das unten-Füßchen hat den HTML-Code „ - &#00df; ist HTML aber nicht bekannt.

      Da es sich scheinbar um eine überschaubare Fallzahl (äöüÄÖÜß) handelt, und das Ergebnis auf ISO-8859-1 Seiten darstellbar sein soll, empfehle ich
      str_replace

      \u00df => ß

      Gast

      1. Hi,

        [...] die z.B. aus """ (drei Gänsefüßchen oben) [...]

        nur der Vollständigkeit halber: " ist das Zeichen für die Maßeinheit Zoll.

        Anführungszeichen oben (“) sehen nämlich anders aus.

        ~dave

        1. [...] die z.B. aus """ (drei Gänsefüßchen oben) [...]

          nur der Vollständigkeit halber: " ist das Zeichen für die Maßeinheit Zoll.

          Anführungszeichen oben (“) sehen nämlich anders aus.

          Nicht wirklich:

          Das Einheitenzeichen für Zoll ist U+2033 - das steht sogar in dem von dir verlinkten Wikipedia-Artikel

          " (das Ding auf der 2), als U+0022 heisst "QUOTATION MARK" - es ist also ein astreines Anführungszeichen.

          1. @@suit:

            nuqneH

            Das Einheitenzeichen für Zoll ist U+2033 - das steht sogar in dem von dir verlinkten Wikipedia-Artikel

            Ja.

            " (das Ding auf der 2), als U+0022 heisst "QUOTATION MARK" - es ist also ein astreines Anführungszeichen.

            Nein.

            Auf der 2? Bei mir nicht.

            Qapla'

            --
            Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
            (Mark Twain)
            1. " (das Ding auf der 2), als U+0022 heisst "QUOTATION MARK" - es ist also ein astreines Anführungszeichen.

              Nein.

              Schick das bitte an Mark Davis - der kümmert sich dann persönlich darum, dass das in den Unicode-Charts geändert wird:
              http://www.unicode.org/charts/PDF/U0000.pdf

              0022 " QUOTATION MARK
              * neutral (vertical), used as opening or closing quotation mark

              Da steht nichts davon, dass es als Zoll-Zeichen gedacht ist - wenngleich es oft als solches verwandt wird.

              Genausowenig sind Grave oder Akut als Ersatzzeichen für das Apostroph gedacht. U+0027 ist ein Mädchen für alles - es ist dort explizt als "glyph with mixed usage" vermerkt.

              Auf der 2? Bei mir nicht.

              Dvorak kanns also schon mal nicht sein - was dann, Klingonisch? :)

              US-International wäre zu langweilig für dich :p

              1. Yerf!

                Dvorak kanns also schon mal nicht sein - was dann, Klingonisch? :)

                US-International wäre zu langweilig für dich :p

                Vielleicht noch so n "Verrückter" der EURKey einsetzt ;-)

                (wobei ich auf meiner US-Layout Tastatur meit das DE-layout verwende und nur ab und an umschalte...)

                Gruß,

                Harlequin

                --
                RIP --- XHTML 2
                nur die Besten sterben jung
              2. @@suit:

                nuqneH

                US-International wäre zu langweilig für dich :p

                Mag sein. Aber durchaus praktisch.

                Qapla'

                --
                Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
                (Mark Twain)
      2. @@Gast:

        nuqneH

        "Babelsberger Stra\u00dfe"

        Das ist doch scheinbar ein zwei-Byte-Code,

        Nein, '\u00df' ist ein Zeichen: U+00DF 'ß'. Dieses lässt sich in ISO 8859-1 in einem Byte codieren: xDF.

        &#00df; ist HTML aber nicht bekannt.

        Wenn man den Codepoint hexadezimal angibt (was man immer tun sollte), muss das in der Referenz kenntlich machen: 'ß' ist in HTML wohl bekannt.

        \u00df => ß

        Nein, 'ß' ist unsinnig. Man kann (und sollte!) das richtige Zeichen 'ß' verwenden.

        Qapla'

        --
        Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
        (Mark Twain)