anarky84666: chinesische Zeichen in latin1 anzeigen

Hallo,
ich konnte weder hier noch bei google irgendetwas zu diesem Thema finden. Deswegen stelle ich jetzt hier diese Frage.

Ich arbeite an einem großen PHP-Projekt, dessen Kollation auf ISO-8859-1 (also Latin1) gestellt ist. An der Gesamteinstellung kann nichts geändert werden, da es mehrere 100-Tausend Codezeilen gibt.

Es soll nun möglich sein, Chinesische Kennzeichen anzuzeigen. Diese enthalten Schriftzeichen wie "辽". Solche Zeichen lassen sich aber in Latin1 nicht darstellen, wohl aber in UTF8.

Gibt es eine Möglichkeit in einer Latin-Codierten Seite UTF8-Codierte Zeichen darzustellen?

Vielen Dank für eure Hilfe,

mfg Stefan

  1. Gibt es eine Möglichkeit in einer Latin-Codierten Seite UTF8-Codierte Zeichen darzustellen?

    Das Übliche: http://de.selfhtml.org/html/referenz/zeichen.htm. Du musst lediglich die utf8-Kodierung entfernen, um den eigentlichen Unicode-Wert zu bekommen.

    1. Gibt es eine Möglichkeit in einer Latin-Codierten Seite UTF8-Codierte Zeichen darzustellen?

      Das Übliche: http://de.selfhtml.org/html/referenz/zeichen.htm. Du musst lediglich die utf8-Kodierung entfernen, um den eigentlichen Unicode-Wert zu bekommen.

      Wie bekomme ich den Unicode-Wert? bzw. wie kann ich bei (z.B. gedit) die utf8-Kodierung entfernen?

      1. Ich habe das Problem gelöst, danke Engelein.

        Lösung:
        Zeichen auf http://www.panpan.org/2007/unicode/10unicode.htm suchen und $zahl raussuchen.
        In html dann einfach &#$zahl z.B. &#20140 schreiben und dann chinesische Zeichen wird dargestellt.

        1. echo $begrüßung;

          In html dann einfach &#$zahl z.B. &#20140 schreiben und dann chinesische Zeichen wird dargestellt.

          Da fehlt ein ; am Ende: 京

          echo "$verabschiedung $name";

          1. Ja,
            also ich kann die Seitenkollation nicht ändern, da in dem gesamten Projekt alle Dateien in latin1 kodiert sind und eine Durchmischung niemals auf Dauer problemfrei laufen würde.
            Außerdem baue ich den Seitenheade nicht auf, sondern nur ein Template mit einem Bisschen Logik in eine standardisierte html-Seite.
            Die Uni-Codelösung behebt mein Problem. Da der Nutzer einer deutschen Seite ohnehin keine chinesische Tastatur hat, werde ich die verfügbaren Zeichen (mit Legende) per <select> auswählen lassen.
            Somit konnte ich das mit den UniCodes ausreichend darstellen.
            Danke für eure Hilfe.

            1. echo $begrüßung;

              Die Uni-Codelösung behebt mein Problem. Da der Nutzer einer deutschen Seite ohnehin keine chinesische Tastatur hat, werde ich die verfügbaren Zeichen (mit Legende) per <select> auswählen lassen.
              Somit konnte ich das mit den UniCodes ausreichend darstellen.
              Danke für eure Hilfe.

              Darf man sich das Ergebnis und das Umfeld drumrum mal ansehen?

              echo "$verabschiedung $name";

        2. Zeichen auf http://www.panpan.org/2007/unicode/10unicode.htm suchen und $zahl raussuchen.
          In html dann einfach &#$zahl z.B. &#20140 schreiben und dann chinesische Zeichen wird dargestellt.

          Sofern du Windows nutzt, kannst du auch die Zeichentabelle benutzen; sie versteckt sich zumindest bei XP im Startmenü unter Programme > Zubehör > Systemprogramme.

          Du hast zwar geschrieben, du könntest am Quellcode selbst nichts ändern, nichtsdestotrotz weise ich mal auf Verdacht darauf hin, dass du den Quellcode der Seiten sehr wohl utf8-kodiert speichern und damit sowohl westliche als auch chinesische Schriftzeichen gleichzeitig und ohne HTML-Maske verwenden kannst.
          Der Haken ist lediglich, dass du diesen Umstand dem Browser mitteilen musst, indem du entweder per PHP header("Content-Type: text/html; charset=utf-8"); ganz am Anfang der betreffenden Datei aufrufst oder, bei reinen HTML-Seiten, <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> im <head>-Block einfügst.

          Stolperfallen gibt es nur, falls irgendwo Formulareingaben möglich sind, da auch diese dann utf-8-kodiert auf dem Server ankommen, nicht mehr in iso-8859-1. Dem lässt sich aber mittels des Attributs accept-charset ein Riegel vorschieben (wobei eine durchgehende Umstellung auf utf-8 natürlich sinnvoller wäre, aber das kann dann wirklich aufwendig werden).

          1. echo $begrüßung;

            Du hast zwar geschrieben, du könntest am Quellcode selbst nichts ändern, nichtsdestotrotz weise ich mal auf Verdacht darauf hin, dass du den Quellcode der Seiten sehr wohl utf8-kodiert speichern und damit sowohl westliche als auch chinesische Schriftzeichen gleichzeitig und ohne HTML-Maske verwenden kannst.
            Der Haken ist lediglich, dass du diesen Umstand dem Browser mitteilen musst, [...]

            Der Haken wird eher sein, dass da mehr als nur eine Datei mitspielt. Der eigentliche Kontent wird vermutlich in ein anderswo erzeugtes Seiten-Korsett gepackt werden, bei dem man nicht einfach mal so für diese eine Seite alles umkodieren kann.

            Stolperfallen gibt es nur, falls irgendwo Formulareingaben möglich sind, da auch diese dann utf-8-kodiert auf dem Server ankommen, nicht mehr in iso-8859-1. Dem lässt sich aber mittels des Attributs accept-charset ein Riegel vorschieben.

            Wenn jemand Text mit Zeichen außerhalb der unterstützten Zeichenkodierung verfasst, dann sollte man annehmen, dass bei Formulareingaben die Anwender ebenjene Zeichen verwenden werden. Diese kann der Browser dann nicht kodieren, verwendet vielleicht NCRs oder sonstwas. Normiert ist dieser Fall jedenfalls nicht. Auf weitere Probleme sollte man sich da einstellen.

            (wobei eine durchgehende Umstellung auf utf-8 natürlich sinnvoller wäre, aber das kann dann wirklich aufwendig werden)

            Auf jeden.

            echo "$verabschiedung $name";

            1. @@dedlfix:

              (wobei eine durchgehende Umstellung auf utf-8 natürlich sinnvoller wäre, aber das kann dann wirklich aufwendig werden)

              Auf jeden.

              Nö. Bei chinesischer Schrift (u.a. Schriften, deren Zeichen in UFT-8 codiert 3 oder 4 Oktetts ergeben) wäre evtl. UTF-16 sinnvoll.

              Live long and prosper,
              Gunnar

              --
              Erwebsregel 208: Manchmal ist das einzige, was gefährlicher als eine Frage ist, eine Antwort.
              1. echo $begrüßung;

                (wobei eine durchgehende Umstellung auf utf-8 natürlich sinnvoller wäre, aber das kann dann wirklich aufwendig werden)
                Auf jeden.
                Nö. Bei chinesischer Schrift (u.a. Schriften, deren Zeichen in UFT-8 codiert 3 oder 4 Oktetts ergeben) wäre evtl. UTF-16 sinnvoll.

                OK, das wäre eine Überlegung wert. Da bei UTF-16 aber auch 00-Bytes auftreten können, was sich mit String-Ende-Zeichen unter C beißt, ist diese Kodierung beispielsweise nicht als eine Kodierung für Verbindungen zu einem MySQL-Server verwendbar. Da müsste man dann immer zwischen UTF-8 und -16 hin- und herkodieren. Ob das Umkodieren oder der Byteverbrauch (für dich: Oktettverbrauch :-) als jeweils ungünstiger anzusehen ist, ...

                echo "$verabschiedung $name";

      2. @@anarky84666:

        Wie bekomme ich den Unicode-Wert?

        Aus den Unicode-Codecharts.

        Das Unicode-Zeichen U+4EAC notierst du als hexadezimale numerische Zeichenreferenz '&#x4EAC;'.

        (Dezimale numerische Zeichenreferenzen sind zu vermeiden!)

        Live long and prosper,
        Gunnar

        --
        Erwebsregel 208: Manchmal ist das einzige, was gefährlicher als eine Frage ist, eine Antwort.
        1. @@Gunnar Bittersmann:

          Wie bekomme ich den Unicode-Wert?

          Aus den Unicode-Codecharts.

          Grmpf.

          --
          Erwebsregel 208: Manchmal ist das einzige, was gefährlicher als eine Frage ist, eine Antwort.