okidoki
Goto Top

Csv (und andere Dateien) in charset utf-8 umwandeln (batch)

Guten Abend,

ich hänge seit Tagen an einem Problem:
Eine csv und php Datei möchte ich, wie der Titel sagt, verlässlich in charset=utf-8 umwandeln. Mit Notepad++ habe ich das eigentlich schon erledigt, im Browser werden in den Dateien ü,äö und ß aber immer noch als � angezeigt. Da ständig neue csv-Dateien anfallen, möchte ich die natürlich automatisch ummodeln.
Also, zwei Fragen:
Wie kann ich die Umwandlung sicher bewerkstelligen und wie automatisieren?

Habe hier einen Ansatz gefunden, der aber leider überhaupt nicht geht bei mir:

iconv -f ISO-8859-1 -t utf-8 foo > bar

Kann mir jemand helfen?
gruenlinge

Content-ID: 264228

Url: https://administrator.de/forum/csv-und-andere-dateien-in-charset-utf-8-umwandeln-batch-264228.html

Ausgedruckt am: 22.12.2024 um 18:12 Uhr

rubberman
Lösung rubberman 22.02.2015 aktualisiert um 22:31:03 Uhr
Goto Top
Hallo OKIDOKI,

mit Batch geht das, allerdings nicht ohne temporäre Dateien.
@echo off &setlocal
:: Zieldatei spezifizieren
set "targetfile=test.txt"  

:: temporäre Dateien spezifizieren
set "utf16file=%temp%\tmp16.utf~"  
set "utf8file=%temp%\tmp8.utf~"  

:: derzeitige Codepage sichern
for /f "tokens=2 delims=:" %%i in ('chcp') do set /a "oemcp=%%~ni"  

:: zu Windows-1252 wechseln
>nul chcp 1252

:: Byte Order Marks schreiben
<nul >"%utf16file%" set /p "=ÿþ"  
<nul >"%utf8file%" set /p "="  

:: Konvertierung zu UTF-16 LE
>>"%utf16file%" cmd /u /q /d /c type "%targetfile%"  

:: Konvertierung zu UTF-8
>nul chcp 65001
>>"%utf8file%" cmd /a /q /d /c type "%utf16file%"  

>nul chcp %oemcp%

:: UTF-16 Datei löschen
del "%utf16file%"  
:: Zieldatei durch UTF-8 Datei ersetzen
>nul move /y "%utf8file%" "%targetfile%"  
Grüße
rubberman
114757
Lösung 114757 22.02.2015 aktualisiert um 22:31:07 Uhr
Goto Top
Moin,
oder mit Hilfe von Powershell in Batch
powershell -ExecutionPolicy ByPass -Command "&{gc 'c:\data_in.csv' | set-content 'c:\data_out.csv' -Encoding UTF8}"  
oder wenns mehrere Dateien auf einmal sein sollen
powershell -ExecutionPolicy ByPass -Command "&{gci 'c:\daten\*.csv' | %{ (gc $_.Fullname) | set-content $_.Fullname  -Encoding UTF8}}"  
Gruß jodel32
OKIDOKI
OKIDOKI 22.02.2015 um 21:51:20 Uhr
Goto Top
Hallo rubberman,
hallo jodel32,

werde beide Varianten ausfürhlich probieren! (Jetzt ist erst mal Bett angesagt face-smile).

Schon mal Vorab riesigen Dank!
Gruenlinge
OKIDOKI
OKIDOKI 22.02.2015 um 22:14:28 Uhr
Goto Top
... ich habs eben doch noch einmal ausprobiert face-smile

Beide Varianten gehen bei mir, wobei ich mich für die rubbermann-Variante entscheiden werde. Grund: Diese kann ich in meinen vorhandenen Batchablauf noch einfacher integrieren. Allerdings habe ich das Gefühl, dass Powershell deutlich leistungsfähiger ist - in batch finde ich zumindest viele Fehler und fühle mich da sicherer...

Ich danke euch für eure prima Hilfe!
gruenlinge