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-Key: 264228

Url: https://administrator.de/contentid/264228

Printed on: April 25, 2024 at 21:04 o'clock

Member: rubberman
Solution rubberman Feb 22, 2015 updated at 21:31:03 (UTC)
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
Mitglied: 114757
Solution 114757 Feb 22, 2015 updated at 21:31:07 (UTC)
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
Member: OKIDOKI
OKIDOKI Feb 22, 2015 at 20:51:20 (UTC)
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
Member: OKIDOKI
OKIDOKI Feb 22, 2015 at 21:14:28 (UTC)
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