floater: Datei-Konvertierung von utf-8 zu utf-16

Hallo,

wie kann man man eine Datei mittels PHP von utf8 nach utf16 konvertieren?

Gruß,
Floater

  1. Tach,

    wie kann man man eine Datei mittels PHP von utf8 nach utf16 konvertieren?

    http://php.net/manual/en/function.iconv.php

    mfg
    Woodfighter

    1. Hallo,

      » Tach,

      wie kann man man eine Datei mittels PHP von utf8 nach utf16 konvertieren?

      http://php.net/manual/en/function.iconv.php

      mfg
      Woodfighter

      danke für den Link, der hat mir doch sehr weitergeholfen. Die Funktion iconv hatte ich dort zwar gefunden, aber ich dachte, dass es vielleicht eine Funktion gibt, die die Datei "in einem Abwasch" kodiert.

      Mit iconv geht es ja nur zeilenweise, aber es funktioniert.

      Egal ob UTF-16 hierzulande Sinn macht oder nicht: Ich benötige bestimmte Dateien zwingend im UTF-16 Format. Daher stellt sich die Frage für mich nicht.

      Gruß,
      Floater

      1. Hi!

        http://php.net/manual/en/function.iconv.php
        danke für den Link, der hat mir doch sehr weitergeholfen. Die Funktion iconv hatte ich dort zwar gefunden, aber ich dachte, dass es vielleicht eine Funktion gibt, die die Datei "in einem Abwasch" kodiert.
        Mit iconv geht es ja nur zeilenweise, aber es funktioniert.

        Wieso sollte das nur zeilenweise gehen? Weil du die Datei mit file() einliest? Dann nimm file_get_contents(), dann hast du den Dateiinhalt in einem String und nicht als ein zeilenweises Array.

        Lo!

  2. wie kann man man eine Datei mittels PHP von utf8 nach utf16 konvertieren?

    Nebst der korrekten Antwort von Jens: warum sollte man das machen wollen?

    UTF-8 bietet nicht wirklich einen Vorteil gegenüber UTF-8 - mit Ausnahme der 1:1-Kodierung.

    1. Hi!

      UTF-8 bietet nicht wirklich einen Vorteil gegenüber UTF-8 - mit Ausnahme der 1:1-Kodierung.

      Welches von beiden UTF-8 ist hier der Tippfehler? Und welche 1:1-Kodierung meinst du?

      Lo!

      1. UTF-8 bietet nicht wirklich einen Vorteil gegenüber UTF-8 - mit Ausnahme der 1:1-Kodierung.

        Welches von beiden UTF-8 ist hier der Tippfehler?

        Das erste sollet UTF-16 werden.

        Und welche 1:1-Kodierung meinst du?

        1 Zeichen = 1 16-Bit-Block in UTF-16, das ist in den meisten Fällen extrem verschwenderisch.

        1. 1 Zeichen = 1 16-Bit-Block in UTF-16, das ist in den meisten Fällen extrem verschwenderisch.

          Das gilt natürlich nur für die BMP ;) ansonsten wäre da natürlich noch UTF-32, wie Wolfgang schon sagt, wo wirklich jedes einzelne Zeichen mit 32-Bit gespeichert wird, das ist dann die inbrunst von Verschwendung.

          1. Hi!

            1 Zeichen = 1 16-Bit-Block in UTF-16, das ist in den meisten Fällen extrem verschwenderisch.
            Das gilt natürlich nur für die BMP ;) ansonsten wäre da natürlich noch UTF-32, wie Wolfgang schon sagt, wo wirklich jedes einzelne Zeichen mit 32-Bit gespeichert wird, das ist dann die inbrunst von Verschwendung.

            Das kommt darauf an, für welchen Anwendungsfall man das betrachtet. Wenn du die Speicherung meinst, ja, da gibt es je nach Inhalt effizientere Ablageformen. Aber wenn du damit arbeiten willst, ist UTF-8 mitunter ungünstig, weil du für Stringverarbeitung die Positionen von Zeichen nicht einfach errechnen kannst, sondern nachschauen muss, wie lang die vorhandenen Zeichen wirklich sind, und so weiter. Oder du kodierst das zwischen der Datei-Kodierung und der für den Arbeitsspeicher um. Beides ist, wenn du so willst, auch Verschwendung, diesmal von Rechenkapazität.

            Lo!

            1. Das kommt darauf an, für welchen Anwendungsfall man das betrachtet. Wenn du die Speicherung meinst, ja, da gibt es je nach Inhalt effizientere Ablageformen. Aber wenn du damit arbeiten willst, ist UTF-8 mitunter ungünstig, weil du für Stringverarbeitung die Positionen von Zeichen nicht einfach errechnen kannst, sondern nachschauen muss, wie lang die vorhandenen Zeichen wirklich sind, und so weiter. Oder du kodierst das zwischen der Datei-Kodierung und der für den Arbeitsspeicher um. Beides ist, wenn du so willst, auch Verschwendung, diesmal von Rechenkapazität.

              CPU-Time ist für derart triviale Dinge "billiger" als Speicherplatz bzw. Platz in der Datenübertragung.

              Aber letztendlich ist das eine Fallentscheidung - wie bereits erwähnt wird aber etwas anderes als UTF-8 sehr selten wirklich sinnvoll sein oder gute Gründe dafür haben.

              1. Hi!

                wie bereits erwähnt wird aber etwas anderes als UTF-8 sehr selten wirklich sinnvoll sein oder gute Gründe dafür haben.

                CJK-Anwender stellen schonmal ungefähr ein Fünftel der Weltbevölkerung. Kyrillisch, griechisch und wer sonst noch so alles nicht mit lateinischen Buchstaben schreibt kommen noch hinzu. Das finde ich nicht gerade "sehr selten" einen "guten Grund". Wenn du hingegen nur deinen eigenen Einzugsbereich meinst, magst du Recht haben.

                Lo!

                1. CJK-Anwender stellen schonmal ungefähr ein Fünftel der Weltbevölkerung. Kyrillisch, griechisch und wer sonst noch so alles nicht mit lateinischen Buchstaben schreibt kommen noch hinzu. Das finde ich nicht gerade "sehr selten" einen "guten Grund". Wenn du hingegen nur deinen eigenen Einzugsbereich meinst, magst du Recht haben.

                  Wenn ich mich nicht täusche, bewegen wir uns hier aber in einem Bereich, in dem Fremdsprachen mit exotischen Zeichen eher weniger oft anzutreffen sind ;)

                  Besonders in unsere Umfeld wo es neben dem Fließtext auch noch Quelltexte gibt ist der Anteil an Zeichen die sich auch mit 8-Bit Kodieren lassen vergleichsweise hoch.

                  1. Hi!

                    Wenn ich mich nicht täusche, bewegen wir uns hier aber in einem Bereich, in dem Fremdsprachen mit exotischen Zeichen eher weniger oft anzutreffen sind ;)
                    Besonders in unsere Umfeld wo es neben dem Fließtext auch noch Quelltexte gibt ist der Anteil an Zeichen die sich auch mit 8-Bit Kodieren lassen vergleichsweise hoch.

                    Kommt darauf an, wie man das Zielpublikum definiert - es sollen sich auch schon "exotische" Touristen hierherverirrt und auch Informationen gesucht haben sowie Einheimische geben, die "Exoten" in "exotischer" Sprache zu informieren gedenken. Ob die "Exoten" Programmiersprachen in ihre eigenen Zeichensysteme umgesetzt oder dafür neue entwickelt haben oder wenigstens Variablennamen in eigener Sprache verwenden ist mir allerdings nicht bekannt.

                    Lo!

                2. @@dedlfix:

                  nuqneH

                  CJK-Anwender stellen schonmal ungefähr ein Fünftel der Weltbevölkerung. Kyrillisch, griechisch und wer sonst noch so alles nicht mit lateinischen Buchstaben schreibt kommen noch hinzu.

                  Für Griechisch und Kyrillisch ist es gehupft wie gesprungen, ein Zeichen wird sowohl in UTF-8 als auch in UTF-16 durch 2 Bytes codiert.

                  Erst ab U+0800 benötigen Zeichen in UTF-8 mehr als 2 Bytes.

                  Für Chinesisch und Japanisch ist UTF-16 freilich platzsparender als UTF-8.

                  Qapla'

                  --
                  Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
                  (Mark Twain)
    2. Nebst der korrekten Antwort von Jens: warum sollte man das machen wollen?

      Weil die eine Datenbank utf-8 codiert ist und die andere utf-16?

      UTF-8 bietet nicht wirklich einen Vorteil gegenüber UTF-8 - mit Ausnahme der 1:1-Kodierung.

      Die 1:1-Codierung wäre utf-32. utf-16 ist geringer komprimiert und optimiert auf asiatische Zeichen. Asiatische Texte sind in utf-16 kürzer als in utf-8.

      1. @@Wolfgang:

        nuqneH

        Weil die eine Datenbank utf-8 codiert ist und die andere utf-16?

        Beim Auslesen aus einer DB wäre der geeignete Zeitpunkt, auf die Zeichencodierung der Daten zu achten.

        Die 1:1-Codierung wäre utf-32.

        ?? Ich verstehe 1:1-Codierung so, dass man sie so decodieren kann, dass man wieder die Originaldaten hat. Das trifft für den Unicode-Zeichensatz sowohl auf UTF-8 als auch auf UTF-16 als auch auf UTF-32 zu.

        Qapla'

        --
        Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
        (Mark Twain)
        1. ?? Ich verstehe 1:1-Codierung so, dass man sie so decodieren kann, dass man wieder die Originaldaten hat. Das trifft für den Unicode-Zeichensatz sowohl auf UTF-8 als auch auf UTF-16 als auch auf UTF-32 zu.

          Nein, es war so gedacht, dass man zeichen der BMP 1:1 ohne komplizierte Multibyte-Codierung darstellen kann.

          Unter dem von dir genannten verstehe ich "verlustfrei" :) afaik gibt es aber keine verlustbehafteten Zeichencodierungsformen.

          1. @@suit:

            nuqneH

            Nein, es war so gedacht, dass man zeichen der BMP 1:1 ohne komplizierte Multibyte-Codierung darstellen kann.

            Die Kompliziertheit liegt im Auge des Betrachters. Ein Mensch mag es nicht naheliegen, ein paar Bits zu shiften. Ist auch nicht seine Aufgabe. Ein Computer zuckt nicht einmal mit der Wimper.

            Unter dem von dir genannten verstehe ich "verlustfrei" :) afaik gibt es aber keine verlustbehafteten Zeichencodierungsformen.

            Wenn ein Text, in dem Zeichen jenseits von U+0100 vorkommen, in ISO 8859-1 codiert wird, gehen Informationen verloren. Entweder alle (wenn der Algorithmus abbricht) oder zumindest die Zeichen jenseits von U+0100.

            Qapla'

            --
            Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
            (Mark Twain)
            1. Die Kompliziertheit liegt im Auge des Betrachters. Ein Mensch mag es nicht naheliegen, ein paar Bits zu shiften. Ist auch nicht seine Aufgabe. Ein Computer zuckt nicht einmal mit der Wimper.

              Aus diesem Grund ist auch gegen UTF-8 nichts einzuwenden, da man damit alle Unicode-zeichen Abbilden/Codieren kann.

              Wenn ein Text, in dem Zeichen jenseits von U+0100 vorkommen, in ISO 8859-1 codiert wird, gehen Informationen verloren. Entweder alle (wenn der Algorithmus abbricht) oder zumindest die Zeichen jenseits von U+0100.

              Wenn du eine Fireworks-PNG-Datei mit Gimp bearbeitest, gehen auch informationen verloren, weil dieser die Fireworks-Spezifischen Daten nicht versteht. Das ist aber kein gewollter Effekt.

    3. @@suit:

      nuqneH

      wie kann man man eine Datei mittels PHP von utf8 nach utf16 konvertieren?

      Nebst der korrekten Antwort von Jens: warum sollte man das machen wollen?

      UTF-8 bietet nicht wirklich einen Vorteil gegenüber UTF-8

      Aber auch keinen Nachteil. ;-)

      Qapla'

      PS: a ≤ b ∧ b ≤ a ⇒ a = b

      --
      Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
      (Mark Twain)
      1. Aber auch keinen Nachteil. ;-)

        :p