Tobias: Mit CMD eine Textdatei erstellen und mit UTF-8 kodieren

Guten Abend zusammen,

ich habe da ein kleines Problemchen: Ich würde gerne die Namen aller Dateien in einem Verzeichnis in eine Textdatei schreiben. Diese Datei soll UTF-8 kodiert sein. Nach ein wenig Internet-Suche bin ich soweit:

inhalt.bat


@echo off
chcp 65001
dir /b>inhalt.txt

Das Problem ist nun, dass die Textdatei nur UTF-8 kodiert wird, wenn sich spezielle Sonderzeichen in mindestens einem der Dateinamen befinden. Tut es das nicht, so wird das Dokument Standart-kodiert (ANSI). Mein Ziel ist es, dass die Textdatei aber in jedem Fall UTF-8 kodiert wird. Mache ich irgendetwas falsch?

Tobias

  1. Liebe Mitdenker, liebe Wissende, liebe Neugierige,

    ja!

    ich habe da ein kleines Problemchen: Ich würde gerne die Namen aller Dateien in einem Verzeichnis in eine Textdatei schreiben. Diese Datei soll UTF-8 kodiert sein. Nach ein wenig Internet-Suche bin ich soweit:

    Guck mal in google unter "convert cp1252 to utf-8", da findest Du diverse Lösungen mit PHP. Kannst dir sicher auch ein EXE it irgendeiner Hochsprache erste,len.

    Ein fertiges Dienstprogramm aus DOS7 fällt mir jetzt leider nicht ein

    Spirituelle Grüße
    Euer Robert
    robert.r@online.de

    --
    Möge der wahre Forumsgeist ewig leben!
    1. Tag,

      Guck mal in google unter "convert cp1252 to utf-8", da findest Du diverse Lösungen [...]

      Also, ich habe hier was gefunden was nach einer Lösungsmöglichkeit aussieht.

      Dazu wird dieser Befehl genutzt:

      iconv.exe -f CP1252 -t UTF-8 test.txt >testout2.txt
      

      Dieser benötigt ja eine iconv-Erweiterung wenn ich das richtig sehe. Diese ist hier verfügbar. Allerdings blicke ich da überhaupt nicht durch was ich machen soll um das zum laufen zu bringen... Könnte mir das mal jemand erklären?

      Tobias

      1. Liebe Mitdenker, liebe Wissende, liebe Neugierige,

        ja!

        Guck mal in google unter "convert cp1252 to utf-8", da findest Du diverse Lösungen [...]

        Also, ich habe hier was gefunden was nach einer Lösungsmöglichkeit aussieht.

        Dazu wird dieser Befehl genutzt:

        iconv.exe -f CP1252 -t UTF-8 test.txt >testout2.txt
        

        Dieser benötigt ja eine iconv-Erweiterung wenn ich das richtig sehe. Diese ist hier verfügbar. Allerdings blicke ich da überhaupt nicht durch was ich machen soll um das zum laufen zu bringen... Könnte mir das mal jemand erklären?

        iconv ist ein unix-tool
        es gibt aber auch eine für Win übersetzte Version (EXE, DLL) die benötigt aber auch die Codepages, oder wie das hier heißt.

        eine umfangreiche Installationsanleitung findest Du hier

        Iconv.exe für Windows

        Wenn Du PHP komplett installiert hast, kannst Du dir auch damit einen Dreizeiler schreiben, der für dich die ganze Arbeit macht: Verzeichnis auslesen, Dateinamen von cp1250 nach utf-8 umwandeln, als Datei abspeichern, ...

        Spirituelle Grüße
        Euer Robert
        robert.r@online.de

        --
        Möge der wahre Forumsgeist ewig leben!
        1. Tag,

          eine umfangreiche Installationsanleitung findest Du hier Iconv.exe für Windows

          Also: erstmal ein großes Dankeschön an dich für deine Mühe.

          Ich habe es tatsächlich zum laufen bekommen - allerdings muss ich sagen, dass es genauso agiert wie der Schnipsel den ich hier in meinem 1. Post gezeigt habe. So denke ich, dass ich mich mit der Situation zufrieden geben muss.

          Tobias

  2. Moin,

    ich habe da ein kleines Problemchen: Ich würde gerne die Namen aller Dateien in einem Verzeichnis in eine Textdatei schreiben. Diese Datei soll UTF-8 kodiert sein. Nach ein wenig Internet-Suche bin ich soweit:

    @echo off
    chcp 65001
    dir /b>inhalt.txt
    

    AFAIK hat chcp nur dann eine Funktion, wenn mehrere Codepages für die Kommandozeile eingerichtet sind, was eher selten sein dürfte.

    Das Problem ist nun, dass die Textdatei nur UTF-8 kodiert wird, wenn sich spezielle Sonderzeichen in mindestens einem der Dateinamen befinden. Tut es das nicht, so wird das Dokument Standart-kodiert (ANSI).

    Ich glaube, deine Schlussfolgerung ist falsch. Solange nur Zeichen aus dem ASCII-Bereich vorkommen, lässt sich die tatsächlich verwendete Codierung nicht mehr erkennen, weil ASCII, ISO-Latin (im Windows-Jargon "ANSI") und UTF-8 in diesem Bereich zu 100% deckungsgleich sind. Erst wenn Zeichen außerhalb von ASCII vorkommen, hat ein Editor oder irgendeine andere Software überhaupt einen Anhaltspunkt, die verwendete Codierung zu bestimmen. Wirklich zuverlässig geht das aber in vielen Fällen auch nicht.

    Ergo: Wenn Windows also die Codierung nicht erkennen kann und dann einfach "ANSI" behauptet, ist das durchaus korrekt. Es ist aber gleichzeitig auch korrektes UTF-8.

    So long,
     Martin

    PS: In Zukunft bitte wieder Standar_d_ mit d, wie es sich gehört.

    1. Tag,

      Das Problem ist nun, dass die Textdatei nur UTF-8 kodiert wird, wenn sich spezielle Sonderzeichen in mindestens einem der Dateinamen befinden. Tut es das nicht, so wird das Dokument Standard-kodiert (ANSI).

      Ich glaube, deine Schlussfolgerung ist falsch. Solange nur Zeichen aus dem ASCII-Bereich vorkommen, lässt sich die tatsächlich verwendete Codierung nicht mehr erkennen, weil ASCII, ISO-Latin (im Windows-Jargon "ANSI") und UTF-8 in diesem Bereich zu 100% deckungsgleich sind. Erst wenn Zeichen außerhalb von ASCII vorkommen, hat ein Editor oder irgendeine andere Software überhaupt einen Anhaltspunkt, die verwendete Codierung zu bestimmen. Wirklich zuverlässig geht das aber in vielen Fällen auch nicht.

      Nun, ich vermute stark, dass es ANSI kodiert ist, da dies die vorausgewählte Codierung in meinem Editor ist, wenn ich auf "speichern als" gehe. Bei speziellen Sonderzeichen ist eben UTF-8 voreingestellt. So vermute ich, dass der Editor die Kodierung am BOM erkennt.

      Tobias

  3. Hallo Tobias,

    Ich würde gerne die Namen aller Dateien in einem Verzeichnis in eine Textdatei schreiben. Diese Datei soll UTF-8 kodiert sein.

    Kommandointerpreter via cmd /u starten. Dann werden die Ausgaben als Unicode behandelt (siehe Notepad -> Datei | Speichern unter…).

    Grüße, Thomas

    1. Warum sieht das Posting so komisch aus? Der rechts stehende Text stand nach einem "|" hinter "Notepad ". Vorschau war allerdings ok.

      Grüße, Thomas

      1. Warum sieht das Posting so komisch aus? Der rechts stehende Text stand nach einem "|" hinter "Notepad ". Vorschau war allerdings ok.

        Aha, das Pipe-Zeichen wird offenbar nicht richtig oder anders als erwartet interpretiert. Im Zitat ist es allerdings wieder drin.

        Grüße, Thomas

        1. Warum sieht das Posting so komisch aus? Der rechts stehende Text stand nach einem "|" hinter "Notepad ". Vorschau war allerdings ok.

          Aha, das Pipe-Zeichen wird offenbar nicht richtig oder anders als erwartet interpretiert. Im Zitat ist es allerdings wieder drin.

          Das passiert, wenn eine Forumssoftware mit Haufenweise Wikipedia-Spielkram zugemüllt wird.

          Der senkrechte Strich ist hier neuerdings nicht mehr verwendbar, weil man damit wohl eine Tabelle baut. Dass solche Formatierungsoptionen in Texten mit fester Zeichenbreite restlos unnötig sind, wie hier zu sehen sogar mehr stören denn helfen, und in den letzten 15 Jahren sicher auch nie gefehlt haben (und in 30 Jahren E-Mail davor bestimmt ebenso wenig), hat derjenige, der das hier eingebaut hat, wohl nicht überblickt. Hauptsache modern.

          1. Der senkrechte Strich ist hier neuerdings nicht mehr verwendbar, weil man damit wohl eine Tabelle baut.

            Danke. Dachte schon, ich bin zu doof/alt für den Quatsch. Offenbar lässt sich das Zeichen | mittels \| maskieren (zeigt zumindest die Vorschau richtig an).

            Grüße, Thomas

            1. Liebe Mitdenker, liebe Wissende, liebe Neugierige,

              ja!

              Der senkrechte Strich ist hier neuerdings nicht mehr verwendbar, weil man damit wohl eine Tabelle baut.

              Danke. Dachte schon, ich bin zu doof/alt für den Quatsch. Offenbar lässt sich das Zeichen | mittels \| maskieren (zeigt zumindest die Vorschau richtig an).

              anders herum würde es mir besser gefallen. Alle Zeichen bis aufs Escapezeichen sind "normal", wenn nicht das Escapezeichen davor steht.

              Aber das wird man wohl nicht mehr ändern können?

              Spirituelle Grüße
              Euer Robert
              robert.r@online.de

              --
              Möge der wahre Forumsgeist ewig leben!