Ankündigung

Einklappen
Keine Ankündigung bisher.

Zeichen in UTF-8 codieren

Einklappen

Neue Werbung 2019

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

  • Zeichen in UTF-8 codieren

    Hi,

    Vorab:
    Ich habe vorab versucht nach dem Problem zu googlen bzw. hier im Forum mir eine Antwort anzulesen. Doch umso mehr ich lese, desto mehr werde ich verwirrt bzw. häufen sich meine Fragen.

    Mein Problem:
    Ich muss einem Webshop eine XML-Datei liefern. Der Webshop arbeitet mit dem Zeichensatz UTF-8. In seiner Doku benutzt er die PHP-Funktion utf8_encode um die Inhalte der XML in UTF-8 zu codieren. Da ich aber nicht mit PHP programmiere, sondern mit Visual DataFlex, kann ich die Funktion utf8_encode natürlich nicht benutzten. Da ist auch nicht da Problem, denn ich kann mir ja selber so eine Funktion schreiben. Ich weiß eben nur nicht, mit was ich z.B. ein "ü" ersetzten soll, wenn ich es nach UTF-8 konvertieren will.

    Annahme:
    Ist meine Annahme richtig das der UTF-8 Zeichensatz in verschiedenen Formaten dargestellt werden kann. Also in Dezimal, Hexadezimal, HTML 4.0 usw.
    Z.B. kann ich doch das Zeichen "ü" in UTF-8 folgendermaßen darstellen:
    Dezimal: 195 188
    Hexadezimal: c3 bc
    Hex. (0x): 0xbc
    HTML 4.0: ü
    HTML Unicode: ü

    Wenn meine Annahme kompletter Unsinn ist, wäre ich euch dankbar mir aus dieser Situation rauszuhelfen.

    Frage:
    In welchem Format werden den die UTF-8 Zeichen bei der PHP-Funktion utf8_encode geliefert? Also in Dezimal, Hexadezimal usw.

    Gruß Nobody_55

  • #2
    Bitte die Dokumentation lesen: http://www.php.net/manual/de/function.utf8-encode.php

    Ansonsten kann ich dir nur den Rat geben: Konsequent mit UTF-8 arbeiten. Damit ersparst du dir das Gefrickel mit encoding/decoding. Lieber einmal etwas mehr Zeit investieren und das ganze System auf UTF-8 umstellen.

    Zitat von Nobody_55 Beitrag anzeigen
    In seiner Doku benutzt er die PHP-Funktion utf8_encode um die Inhalte der XML in UTF-8 zu codieren.
    Sofern die XML-Datei in UTF-8 kodiert ist, ist das gar nicht nötig. Ich hoffe, dass dieser Shop nicht per se alle inkommenden XML mit utf8_encode behandelt.

    Kommentar


    • #3
      Zitat von Nobody_55 Beitrag anzeigen
      Da ich aber nicht mit PHP programmiere, sondern mit Visual DataFlex,
      Da bist du hier falsch, denn wir kennen nicht die Möglichkeiten von Visual DataFlex für eine Dateiausgabe...

      Aber es hilft u.U. folgendes als Anregung (UTF-8 header):
      PHP-Code:
      echo  bin2hex("ü");  //c3bc
      echo "\xc3\xbc";     //ü 
      Um ein UTF-8 codiertes ü zu erhalten mußt du nur die richtigen Bytes in der richtigen Reihenfolge ausgeben.

      LG jspit

      Kommentar


      • #4
        Ich will auch gar nicht, das ihr mir irgendwelche Befehle in VDF nennt.

        Mein Problem ist nur, das meine XML-Datei, die ich über VDF erstelle anscheinend nicht UTF-8 codiert ist.

        Da der Webshop aber in der Doku zum erstellen der XML-Datei die PHP-Funktion benutzt um den Inhalt der XML in UTF-8 darzustellen, dachte ich ihr könnt mir helfen. Ich würde gerne wissen was mir die Funktion utf8_encode zurückgibt. Das Sie mir einen String in UTF-8 zurückgibt ist mir schon klar, aber in welchem Format gibt Sie mir den UTF-8 String zurück. Mit Format meine ich wie oben beschrieben, in Dezimal oder Hexadezimal oder Hex. (0x).

        Denn ich muss ja später eine Funktion in VDF schreiben, die z.B. ein "ä" in einem String sucht und dieses "ä" muss ich ja durch etwas ersetzten, damit der Webshop was mit dem String anfangen kann. Ich weiß eben nur nicht mit was ich das "ä" ersetzten soll.

        Kommentar


        • #5
          Lies doch bitte die Dokumentation. Darin steht:
          Code:
          utf8_encode — Encodes an ISO-8859-1 string to UTF-8
          Auf Deutsch: die Funktion verlangt nach einem ISO-8859-1 kodierten String. Sofern der Shop mit ausschließlich mit utf8_encode arbeitet, muss eben ein ISO-8859-1 kodierter String geliefert werden. Wie kommst du darauf, bspw. ein "ä" durch irgendwas ersetzen zu wollen, was erhoffst du dir davon? Du musst das "ä" durch nichts ersetzen, sondern lediglich in ISO-8859-1 kodieren. Verstanden?

          Kommentar


          • #6
            Zitat von Nobody_55 Beitrag anzeigen
            Ich weiß eben nur nicht mit was ich das "ä" ersetzten soll.
            Genau das habe ich dir in #3 versucht zu verklickern. Mein Beispiel hast du offenbar nicht verstanden. Ich schreib es nochmal anders:

            PHP-Code:
            echo  bin2hex("ä");  //c3a4
            echo chr("0xc3").chr("0xa4"); //Ausgabe ä als UTF-8 
            LG jspit

            Kommentar


            • #7
              Ist das nun richtig? Man achte auf das TAG NAME_DE
              Code:
              <?xml version="1.0" encoding="UTF-8" ?> 
              - <POWERGAP_API>
              - <ARTIKEL_ANLEGEN>
                <UPDATE>1</UPDATE> 
                <ANR>100117</ANR> 
                <HER>Dennerle</HER> 
                <AG>1</AG> 
                <EAN>4001615100730</EAN> 
                <NAME_DE>DE Duomc3a4t</NAME_DE> 
                </ARTIKEL_ANLEGEN>
                </POWERGAP_API>

              Kommentar


              • #8
                Nein, das ist so Unsinn. Wenn deine Kodierung im Editor auf UTF-8 eingestellt ist und deine Ausgabe ebenfalls, dann erscheint da ganz normal ein ä.
                Du hast fürchte ich grundlegende Probleme beim Verständnis der einzelnen Zeichensätze inklusive ihrer Codierung. Das brauchst du jedoch, wenn du eigene Konvertierungsfunktionen in irgend einer Sprache schreiben willst.
                Nimm dir für den Anfang einen Editor der UTF-8 kann und besorg dir einen Hex-Editor, schreibe dann Text und Umlaute (UTF-8 ) und schau dir dies im Hexeditor an.

                Nur so nebenbei, da ich es nicht kenne: Kann Visual DataFlex nur ISO und kein UTF-8 ?

                LG jspit

                Kommentar


                • #9
                  Mich würde noch interessieren, an welcher Stelle im Webshop utf8_encode zum Einsatz kommt.

                  Kommentar


                  • #10
                    Danke erstmal an euch, dass ihr euch Zeit für mich nimmt, obwohl es ja eigentlich nur am Rande über PHP geht.

                    @jspit
                    VDF benutzt die Zeichensätze ANSI und OEM. Wir verwenden bei uns Standardmäßig den ANSI Zeichensatz.

                    @Trainmaster
                    Da habe ich mich wohl ein wenig undeutlich ausgesprochen. Der Webshop erwartet eine XML-Datei. In seiner Doku zeigt er ein Beispiel wie eine XML-Datei erstellt wird. Dieses Beispiel hat er in PHP dargestellt und in diesem Beispiel benutzt er die Funktion utf8_encode um die Inhalte die in die XML-Datei rein sollen nach UTF-8 zu kodieren. Da dachte ich mir, wenn ihr mir beantworten könnt was die Funktion mir zurückgibt, könnte ich mir eine eigene Funktion bauen.

                    Da es aber wirklich etwas kompliziert ist, werde ich mal den Rat von jspit befolgen und mir mal mit Notepad++ ein Dokument erstellen und das mir mit einem Hex-Editor anschauen.

                    Gruß Nobody_55

                    Kommentar


                    • #11
                      Zitat von Nobody_55 Beitrag anzeigen
                      Da dachte ich mir, wenn ihr mir beantworten könnt was die Funktion mir zurückgibt, könnte ich mir eine eigene Funktion bauen.
                      Das haben wir schon mehrfach beantwortet: Die Funktion gibt die UTF-8 Repräsentation der übergebenen ISO-8859-1 Zeichenkette zurück.

                      Wenn dich interessiert, was genau in der Funktion geschieht, siehe: https://github.com/php/php-src/blob/...xml/xml.c#L609.

                      Hast du dich bereits im Forum von Visual DataFlex umgesehen? Nach kurzer Recherche kann ich jedenfalls sagen, dass du mit deinem Vorhaben nicht alleine bist

                      Kommentar

                      Lädt...
                      X