Roger: problem bei import von csv-datei (umlaute)

moin!

beim import aus einer "normalen" csv-datei (also der inhalt kann mit einem texteditor eingesehen und als lesbar eingestuft werden) in ein anwederprogramm, werden umlaute nicht dargestellt, bzw. umgewandelt/flasch dargestellt. so wird aus einem ä ein "anführungszeichen unten". wie muss der inhalt der csv-datei aussehen, damit dieser korrekt importiert wird?

gruß.
roger.

--
meine freundin sagt, ich wäre neugierig.
so steht's zumindest in ihrem tagebuch.
  1. Hi,

    du hast vermutlich ein Problem mit der Zeichenkodierung.
    Da ich jetzt aber keine Lust hab, dein Betriebssystem, die Quellanwendung und die Zielanwendung zu erraten, fehlt mir auch die Lust, meine Glaskugel zu befragen. Somit ist keine weiterführende Hilfe möglich.

    Ich würde die Zeichenkodierung per Menü in base_config ändern oder direkt im KDE-Kontrollzentrum

    1. moin!

      sorry für die minderwertige auskunft meinerseits.
      die csv-datei wird auf nem linux-server erzeugt und kann wunderbar auf einem windows-system mit dem hauseigenen editor gelesen werden (außer die zeilenumbrüche; text ist alles hintereinander). hier stimmen noch die umlaute. erst nach dem import in das anwendungsprogramm vergurkt die anzeige. da muss wohl irgendwas im anwendungsprogramm eingestellt werden, oder? ich wollte doch nur erst den fehler auf meiner seite suchen.

      gruß.
      roger.

      --
      meine freundin sagt, ich wäre neugierig.
      so steht's zumindest in ihrem tagebuch.
      1. Hi,

        die csv-datei wird auf nem linux-server erzeugt

        Ich denke, darin liegt die Lösung. Der Server erzeugt dir vermutlich eine Datei mit UTF-8, und damit werden die Umlaute falsch dagestellt, wenn der "Empfänger" diese Kodierung nicht darstellen kann/nicht richtig eingestellt ist.

        Schau mal in deinem Programm nach, ob du UTF-8 lesen kannst, sonst gibts Konverter von UTF-8 nach ISO-Irgendwas (weiss jetzt die Nummer nicht)

        1. moin!

          Ich denke, darin liegt die Lösung. Der Server erzeugt dir vermutlich eine Datei mit UTF-8, und damit werden die Umlaute falsch dagestellt, wenn der "Empfänger" diese Kodierung nicht darstellen kann/nicht richtig eingestellt ist.

          ich hab doch das script geschrieben (s.o.), was die csv-datei mit ascii-zeichen anlegt. ich habe nirgends erwähnt, dass ich die zeichen umwandle. im obigen script werden stur zeichen erzeugt und in die datei geschrieben.

          selbst wenn ich die datei mir direkt auf dem server anzeige (mit vi oder mc) werden die umlaute richtig angezeigt.
          auch auf anderen editoren auf meinem win-system passt alles.

          gruß.
          roger.

          --
          meine freundin sagt, ich wäre neugierig.
          so steht's zumindest in ihrem tagebuch.
          1. Hi,

            ich hab doch das script geschrieben (s.o.), was die csv-datei mit ascii-zeichen anlegt. ich habe nirgends erwähnt, dass ich die zeichen umwandle. im obigen script werden stur zeichen erzeugt und in die datei geschrieben.

            Dein Script schreibt nur die Daten aus einer Variable in eine Datei.
            Welche Daten das sind, ist aber nicht ersichtlich.
            Aber vielleicht kommen wir der Sache näher, wenn du mir sagst, in welchem Programm die Umlaute nicht richtig angezeigt werden.

          2. echo $begrüßung;

            ich hab doch das script geschrieben (s.o.), was die csv-datei mit ascii-zeichen anlegt. ich habe nirgends erwähnt, dass ich die zeichen umwandle. im obigen script werden stur zeichen erzeugt und in die datei geschrieben.

            Wo kommen die Daten her? Wie sind sie dort kodiert? Gibt es irgendwelche Umwandlungen auf dem Weg?
            Wenn die Daten im Script stehen, wie ist dieses kodiert?

            selbst wenn ich die datei mir direkt auf dem server anzeige (mit vi oder mc) werden die umlaute richtig angezeigt.

            Das hat nicht viel zu sagen. Wenn die Programme, die du verwendest, UTF-8-fähig sind, dann werden die Umlaute richtig angezeigt. Schau dir lieber die Datei mit einem Hex-Editor oder im Hex-Mode an (im mc kann man das umschalten).

            auch auf anderen editoren auf meinem win-system passt alles.

            Wenn die Hex-Ansicht zeigt, dass die Umlaute nach ISO-8859-1 kodiert sind, dann solltest du den Fehler in deinem Anwendungsprogramm suchen.

            echo "$verabschiedung $name";

            1. moin!

              echo $begrüßung;

              ich hab doch das script geschrieben (s.o.), was die csv-datei mit ascii-zeichen anlegt. ich habe nirgends erwähnt, dass ich die zeichen umwandle. im obigen script werden stur zeichen erzeugt und in die datei geschrieben.

              Wo kommen die Daten her? Wie sind sie dort kodiert? Gibt es irgendwelche Umwandlungen auf dem Weg?

              ich nehme einfach einen string, den ich selbst geschrieben habe.
              $csv = "roger;test;blab;blüb;bä\n";
              $csv.= "roger2;test;blab;blüb;bä\n";

              nix konvertiert, gar nix. einfach genommen und in eine neue datei geschrieben.

              Das hat nicht viel zu sagen. Wenn die Programme, die du verwendest, UTF-8-fähig sind, dann werden die Umlaute richtig angezeigt. Schau dir lieber die Datei mit einem Hex-Editor oder im Hex-Mode an (im mc kann man das umschalten).

              hab mal mit mc in den hex geschaltet. jetzt ist der text nur rechts in der spalte zu sehen. allerdings immernoch mit allen umlauten. (hab nicht viel ahnung von hex).

              Wenn die Hex-Ansicht zeigt, dass die Umlaute nach ISO-8859-1 kodiert sind, dann solltest du den Fehler in deinem Anwendungsprogramm suchen.

              ultraedit zeigt mir das selbe wie mc.

              eins hab ich noch:
              bei dem anwenderprogramm, kann man auswählen zwischen ascii- und ansi-import. gibt es hier schon unterschiede? sicherlich, mehr konnte ich dem kunden allerdings nicht telefonsich rauslocken. werde morgen mal hin fahren.

              gruß.
              roger.

              --
              meine freundin sagt, ich wäre neugierig.
              so steht's zumindest in ihrem tagebuch.
              1. echo $begrüßung;

                hab mal mit mc in den hex geschaltet. jetzt ist der text nur rechts in der spalte zu sehen. allerdings immernoch mit allen umlauten. (hab nicht viel ahnung von hex).

                Viel mehr als nicht viel Ahnung braucht man bei der Hex-Darstellung auch nicht. Etwas mehr Ahnung braucht man, was das Abbilden von Zeichen auf Zahlenwerte angeht. Doch die lässt sich anlesen[1].

                ultraedit zeigt mir das selbe wie mc.

                Das ist nicht anders zu erwarten, sonst wäre eins von beiden defekt. Jeder Hex-Viewer gibt die Bytewerte aus, so wie sie in der Datei stehen, ohne sie zu interpretieren, sonst hat er diese Bezeichnung nicht verdient.

                Links siehst du die Bytewerte, mit denen deine Zeichen kodiert sind. Die Wikipedia hat eine ASCII-Tabelle in Dezimal und Hex-Screibweise für die ersten 128 Zeichen. Für Zeichen, die nicht vom ASCII-Standard abgedeckt werden, gibt es unterschiedliche Kodierungsvorschriften.

                bei dem anwenderprogramm, kann man auswählen zwischen ascii- und ansi-import. gibt es hier schon unterschiede?

                Ja, bestimmt, sonst wäre diese Auswahlmöglichkeit sinnlos. Allerdings weiß ich nicht, was die Anwendung unter ANSI versteht, da gibt es mehrere Varianten zur Auswahl.

                mehr konnte ich dem kunden allerdings nicht telefonsich rauslocken. werde morgen mal hin fahren.

                Interpretiere ich das richtig, dass du auf deinem System einen Fehler suchst, der auf einem anderen System auftritt? Wenn ja, solltest du die Fehlersuche auf dem anderen System wiederholen.

                echo "$verabschiedung $name";

                [1] Zumindest die beiden Kapitel "Computer und geschriebene Sprache" und "Zeichenkodierungen (ISO-8859-Familie und andere)" lege ich dir nahe.

  2. echo $begrüßung;

    beim import aus einer "normalen" csv-datei (also der inhalt kann mit einem texteditor eingesehen und als lesbar eingestuft werden)

    Vermutlich erkennt der Editor (ich tippe auf Notepad, der kann das), dass diese Datei nach UTF-8 kodiert ist. Er könnte das an einer BOM erkennen.

    in ein anwederprogramm, werden umlaute nicht dargestellt, bzw. umgewandelt/flasch dargestellt.

    Das Anwendungsprogramm wird von einer Kodierung nach ISO-8859-1 oder Win-1252 ausgehen.

    so wird aus einem ä ein "anführungszeichen unten".

    Nein, aus einem ä wird vermutlich ä. Und aus einem Ä wird sicher nicht nur „ sondern Ä.

    wie muss der inhalt der csv-datei aussehen, damit dieser korrekt importiert wird?

    So wie es das Anwendungsprogramm erwartet. Vielleicht kann man diesem sagen, dass die einzulesende Datei nach UTF-8 kodiert ist.

    echo "$verabschiedung $name";

    1. moin!

      So wie es das Anwendungsprogramm erwartet. Vielleicht kann man diesem sagen, dass die einzulesende Datei nach UTF-8 kodiert ist.

      ich denk aber, dass die datei ascii-zeichen enthält.
      das ist die funktion, die die werte schreibt:
      <?php
        $fp = fopen($datei,"w");
        flock($fp,2);
        fputs($fp,$csv);
        flock($fp,3);
        fclose($fp);
      ?>
      nix weiter. kein utf-8.

      gruß.
      roger.

      --
      meine freundin sagt, ich wäre neugierig.
      so steht's zumindest in ihrem tagebuch.
      1. Hi,

        fputs($fp,$csv);

        Was steht denn in $cvs?
        Mach doch da mal ein utf8_decode($cvs) (oder so ähnlich) und probiers nochmal. Vielleicht werden die Daten woanders kodiert.

        1. Sorry, muss natürlich uft8_encode($cvs) heissen

  3. moin!

    das "anwenderprogramm" war nur ein blödes excel-makro. dort konnte man zwischen ascii und ansi auswählen. hat man letzteres ausgewählt, so wurden auch deutsche umlaute perfekt importiert.

    gruß.
    roger.

    --
    meine freundin sagt, ich wäre neugierig.
    so steht's zumindest in ihrem tagebuch.