Zeichenproblem beim Zusammenführen von Dateien

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

  • Zeichenproblem beim Zusammenführen von Dateien

    Hallo zusammen,

    ich bekomme von einem Lieferanten Textdateien.
    In jeder Datei steht eine Datenzeile, die im Notepad++ auch normal angezeigt werden und mit einem CRLF enden.

    Nun lese ich diese wie folgt ein:
    PHP-Code:
    while (!feof($fhtempfile)) 
    {
        
    $buffer fgets($fhtempfile,1024);
        
    fwrite($fhsammel$buffer."\n");
    }
    fclose($fhtempfile); 
    Die Datei kommt von einem holländischen WWS.
    Zeichensatz unbekannt - bzw. würde ich es gerne selbst lösen, da die Kommunikation etwas holprig ist.

    In der Sammeldatei steht ab der zweiten Zeile immer so ein komisches Zeichen. ਊ਀ ich habe extra einen Screenshot als Anhang mitgesendet, da das Zeichen wirklich seltsam aussieht.

    Hat jemand ne Idee, wo hier das Problem sein könnte?
    Angehängte Dateien

  • #2
    Hallo,

    wenn man diese UTF-8-Sequenzen aufdröselt, bekommt man den Unicode Code Point U+0A0A und der sieht verdächtig danach aus, als ob eine UTF-16-Datei mit ASCII-Zeilenumbrüchen (0x0A) verstümmelt wurde, die dadurch keinen Sinn mehr ergeben (es sei denn deine Kunden sprechen Panjabi). Im Notepad++ siehst du ja unten rechts die Kodierung. Wenn dort was von UCS-2 steht, darfst du natürlich keine 0x0A-Bytes reinschreiben, sondern ebeso codierte LFs in der Form 0x00 0x0A (Big Endian) oder 0x0A 0x00 (Little Endian).

    Gruß,

    Amica
    Zuletzt geändert von AmicaNoctis; 27.04.2011, 17:05.
    [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
    Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
    Super, danke!
    [/COLOR]

    Kommentar


    • #3
      Hallo Amica,

      Im Notepad steht UCS-2 Little Endian.
      Da ich da nicht so durchblicke, bitte ich dich um einen weiteren Tipp.

      Verstehe ich das richtig, dass mein "\n"-Zeilenumbruch falsch ist?
      PHP-Code:
      while (!feof($fhtempfile)) 
      {
          
      $buffer fgets($fhtempfile,1024);
          
      fwrite($fhsammel$buffer."\n");
      }
      fclose($fhtempfile); 
      Wie muss ich den code anpassen, damit das funktioniert ?

      Gruß jogi

      Kommentar


      • #4
        Zitat von jogisarge Beitrag anzeigen
        Im Notepad steht UCS-2 Little Endian.
        Da ich da nicht so durchblicke, bitte ich dich um einen weiteren Tipp.
        Zitat von AmicaNoctis Beitrag anzeigen
        Wenn dort was von UCS-2 steht, darfst du natürlich keine 0x0A-Bytes reinschreiben, sondern ebeso codierte LFs in der Form 0x00 0x0A (Big Endian) oder 0x0A 0x00 (Little Endian).

        Verstehe ich das richtig, dass mein "\n"-Zeilenumbruch falsch ist?
        Kommt drauf an, in welcher Kodierung er geschrieben wird (also in erster Linie abhängig von der Kodierung, in der das Script gespeichert ist).

        Verwende einfach die entsprechenden Bytewerte, die Amica genannt hatte, stattdessen - das sollte am unproblematischsten sein.

        Und falls du nicht weißt, wie du gezielt Bytewerte in PHP notieren/erzeugen kannst - RTFM, please.
        I don't believe in rebirth. Actually, I never did in my whole lives.

        Kommentar


        • #5
          Hallo nochmal,

          ich hab meinen code nun so abgeändert:
          PHP-Code:
          while (!feof($fhtempfile))  

              
          $buffer fgets($fhtempfile,1024); 
              
          fwrite($fhsammel$buffer.chr(0x0A).chr(0x00));

          fclose($fhtempfile); 
          nun ist es total abgefahren:
          ich führe 8 Dateien zu einer zusammen.
          jede zweite zeile ist in chinesisch, oder so ???

          Kann mir bitte nochmal jemand helfen ?

          Gruß jogi
          Angehängte Dateien

          Kommentar


          • #6
            Das Grundproblem ist klar, denke ich. Um jetzt weitere Hilfe leisten zu können, brauchen wir mehr Informationen. Der Code ist diesbezüglich nichtssagend, weil daraus nicht hervorgeht, was von wo eingelesen und nach wo gespeichert wird und der Screenshot lässt die Information vermissen, welche Datei er zeigt.

            Also erklär bitte erstmal, was jetzt wo hingehört, warum es das tut, was du womit machen willst oder gemacht hast und zwar wann und an welcher Stelle. Du kannst gerne auch Auszüge aus den Dateien anhängen, aber dann bitte mit Detailinformationen, wo diese Dateien herkommen und was mit ihnen passieren soll.
            [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
            Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
            Super, danke!
            [/COLOR]

            Kommentar


            • #7
              Um Dateien erfolgreich zusammenführen können muss man den verwendeten Zeichensatz jeder einzelnen Datei kennen, auch der Zieldatei. Unterscheiden sich diese Zeichensätze, muss konvertiert werden. Sollen Zeilenumbrüche hinzugefügt werden, müssen sie natürlich auch zum Zeichensatz passen.

              Doku: iconv()
              Wir werden alle sterben

              Kommentar

              Lädt...
              X