Ankündigung

Einklappen
Keine Ankündigung bisher.

ANSI in UTF-8

Einklappen

Neue Werbung 2019

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

  • ANSI in UTF-8

    Hallo
    Ich komme nochmals mit meinen Spezialzeichen. Ich lese eine CSV-Datei (nach Angaben in der Dokumentation im ANSI-Format) wie folgt ein:

    PHP-Code:
       $handle fopen ($datei"r");
       while (
    $teile fgetcsv($handle))
         {
         
    $reg1=$teile[6];
         
    $reg2=utf8_encode ($teile[6]);
         echo 
    $reg1,"regorg:"$reg2;
         
    etc
    Nun erhalte ich aber eine kleines Quadrat statt dem Bindestrich. Der Input für den Bindestrich ist gem. Editor hex=96.
    Trentino�Alto Adige regorg: Trentino–Alto Adige

    Wie bekomme ich den Bindestrich hin?
    Viele Grüsse, nebbiolo

  • #2
    Du solltest herausfinden, welche Zeichenkodierung die Datei hat. Frag am besten den Ersteller der Datei, der sollte es ja wissen. "ANSI" ist keine Zeichenkodierung, sondern ein Normungsinstitut.

    Kommentar


    • #3
      ich habe es versucht
      iconv("ISO-8859-2", "UTF-8", $reg1) und auch mit "Windows-1252" - erfolglos. Darum habe ich den Hex-wert "96" angegeben.

      Kommentar


      • #4
        Welchen Content Type und welchen Zeichensatz liefert der Server?

        Wenn du ASCII meinst, musst du gar nichts konvertieren.

        Kommentar


        • #5
          Sieht nach Windows-1252 und nicht nach ASCII aus:

          https://de.wikipedia.org/wiki/Windows-1252

          Wie protestix anmerkt musst du im HTTP-Header auch im Content-Type angeben, dass du UTF-8 ausgibst.
          PHP-Code:
          header('Content-Type: text/html;charset=utf-8'); 

          Kommentar


          • #6
            Also Windows-1252 und auch der header hat nichts bewirkt. Wenn ich aber
            PHP-Code:
            $regorg=str_replace("\x96","-",$teile[6]); 
            eingefügt habe, zeigt es mir den Bindestrich an
            Aber ich sollte den Bindestrich-Vollbreit (-) haben, wenn ich den im Editor (Phase5) eingebe erhalte ich ein?

            Kommentar


            • #7
              Verwende mal einen vernünftigen Editor und kein Steinzeitwerkzeug welches von UTF-8 nie etwas gehört hat.

              Kommentar


              • #8
                Zitat von nebbiolo Beitrag anzeigen
                Also Windows-1252 und auch der header hat nichts bewirkt. Wenn ich aber
                PHP-Code:
                $regorg=str_replace("\x96","-",$teile[6]); 
                eingefügt habe, zeigt es mir den Bindestrich an
                Aber ich sollte den Bindestrich-Vollbreit (-) haben, wenn ich den im Editor (Phase5) eingebe erhalte ich ein?
                Welche Zeichenkodierung steht denn im HTTP-Header, wenn du im Browser nachschaust?

                Kommentar


                • #9
                  OK, ich habe das Zeichen mit dem Notepad++ eingeben und erhalte nun "Trentino–Alto Adige" - einfach verhext.
                  Kann man einen "haeder" oder etwas für die input-Datei definieren?

                  Kommentar


                  • #10
                    Zitat von nebbiolo Beitrag anzeigen
                    OK, ich habe das Zeichen mit dem Notepad++ eingeben und erhalte nun "Trentino–Alto Adige" - einfach verhext.
                    Verhext ist da nix. Man muss nur wissen, was man tut, und systematisch vorgehen statt blind herumprobieren.

                    Zitat von nebbiolo Beitrag anzeigen
                    Kann man einen "haeder" oder etwas für die input-Datei definieren?
                    Bitte was? Hast du dich schon mal mit den HTTP-Grundlagen beschäftigt?

                    Kommentar


                    • #11
                      Vielleicht noch eine Erklärung: ich lese aus der Datei ua. die Region und vergleiche ob sie in der SQL-Datenbank vorhanden ist - deshalb müsste ich genau das gleiche Zeichen erhalten ...

                      Kommentar


                      • #12
                        Zitat von nebbiolo Beitrag anzeigen
                        Vielleicht noch eine Erklärung: ich lese aus der Datei ua. die Region und vergleiche ob sie in der SQL-Datenbank vorhanden ist - deshalb müsste ich genau das gleiche Zeichen erhalten ...
                        Du solltest überall die gleiche Zeichenkodierung verwenden. In deinen PHP-Dateien, bei deiner Datenbankverbindung und bei deinen HTTP-Responses. Wenn du das machst, sollte es keine Probleme geben.

                        Kommentar


                        • #13
                          HTTP-Grundlagen: OK, das ist einfacher gesagt als getan
                          Ich (so glaube ich) überall UTF-8.

                          <!DOCTYPE html>
                          <html lang="de">
                          <head>
                          <meta charset="UTF-8">

                          Das Problem liegt ja nur an der "fremden" zu importierenden CSV-Datei.

                          Kommentar


                          • #14
                            Schau im gelieferten HTTP-Header nach, ob wirklich UTF-8 verwendet wird.

                            Hier übrigens ein Beispiel das zeigt, das es funktionert, wenn man es korrekt macht:
                            PHP-Code:
                            $char "\x96";

                            $charUtf8 iconv('Windows-1252''UTF-8'$char);

                            header('Content-Type: text/html;charset=utf-8');
                            echo 
                            '<div>' $charUtf8 '</div>'

                            Kommentar


                            • #15
                              Nun hat es wirklich geklappt - vielen Dank hellbringer!

                              PHP-Code:
                              $regorg iconv('Windows-1252''UTF-8',$teile[6]); // funktioniert bestens ;-)
                              $text=utf8_encode ($teile[7]); 
                              wäre es nun besser den $text auch mit iconv zu konvertieren?

                              Kommentar

                              Lädt...
                              X