xaero1982
Goto Top

FTP Umwandlung UTF-8 in ANSI

Moin Zusammen,

gibt es eine Möglichkeit das CSV Dateien direkt vom FTP Server oder beim Upload vom UTF-8 Format in ANSI Konvertiert werden?

Ohne jetzt viel zu programmieren etc? Gibt es da ein Tool für?

Grüße und Danke
x

Content-Key: 366265

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

Ausgedruckt am: 28.03.2024 um 08:03 Uhr

Mitglied: colinardo
Lösung colinardo 27.02.2018 aktualisiert um 14:52:59 Uhr
Goto Top
Servus.
Welches OS?
In der Bash kannst du iconv nutzen (unter Windows kannst du das ebenfalls nutzen (cygwin und Co.))
iconv -f UTF-8 -t CP1252 file.csv >file.ansi.csv
Für Windows gibt ja auch einiges dazu
https://stackoverflow.com/questions/13130214/how-to-convert-a-batch-file ...

Grüße Uwe
Mitglied: Xaero1982
Xaero1982 27.02.2018 um 16:35:24 Uhr
Goto Top
Hi Colinardo,

der FTP läuft auf nem Windows Server über den IIS.
Aber das kann ich ja dann auch nur übern Taskplaner automatisiert machen, richtig?

Es ging mir ja gerade um die Automatisierung ...

Grüße
Mitglied: Xaero1982
Xaero1982 27.02.2018 um 16:55:24 Uhr
Goto Top
Ich hab gerade mal ausgelesen was das tatsächlich für Dateien sind die da umgewandelt werden sollen und dieses Script:
http://franckrichard.blogspot.de/2010/08/powershell-get-encoding-file-t ...

Sagt mir, dass es ASCII ist... ich soll sie in ANSII konvertieren, aber die Umlaute in den Dateien sind schon hin Ü = ü z.B.
Kann man das wieder umwandeln?
Mitglied: colinardo
colinardo 27.02.2018 um 17:18:40 Uhr
Goto Top
Mitglied: Xaero1982
Xaero1982 27.02.2018 um 22:21:37 Uhr
Goto Top
Ich versuche gerade ne Schleife zu basteln, aber irgendwie...

for /F "delims==?" %i in ('dir /b /a "Ordner\*.csv"') do echo iconv.exe -f UTF-8 -t CP1252 "Ordner\%i" >  "Ordner\%i"  

Sind die die Dateien danach immer 0kb groß und im Echo steht dann immer
for /F "delims==?" %i in ('dir /b /a "Ordner\*.csv"') do echo iconv.exe -f UTF-8 -t CP1252 "Ordner\%i" 1>  "Ordner\%i"  

Woher kommt diese 1 vor dem >?

Jemand eine Idee?

Grüße
Mitglied: colinardo
Lösung colinardo 28.02.2018 aktualisiert um 07:42:15 Uhr
Goto Top
Wo hast du das abenteuerliche Konstrukt kopiert face-smile?
Wenn so dann für die "direkte Konsoleneingabe"
(Für eine Batch müssen die Prozentzeichen ja verdoppelt werden!)
for %a in ("c:\Ordner\*.csv") do iconv.exe -f UTF-8 -t CP1252 "%a" >"c:\neuerordner\%~nxa"  
Du kannst ja nicht ohne temp. Zwischenkopie aus einer Datei gleichzeitig lesen und wieder überschreiben.

Aber teste erst mal mit einer einzelnen Datei ob inconv so bei deinen Files überhaupt das macht was du willst, ich glaube nämlich dass du es genau anders rum brauchst. Und vertraue bitte nicht auf "Notepad" das gaukelt einem immer was vor.

Am einfachsten du lädst mal eins von den Dateien im Originalformat hoch oder kontaktierst mich per PN dann check ich das für dich.
Mitglied: Xaero1982
Xaero1982 28.02.2018 um 07:51:35 Uhr
Goto Top
Moin,

das hab ich mir irgendwie zusammen geschustert. Aber du hast natürlich recht face-smile
Ich teste das nachher wenn ich zuhause bin.

Grds. tut es das was es soll, so wie ich den Kunden verstanden habe. Hochladen kann ich die Daten leider nicht, weil sie streng vertraulich sind. Aber zumindest waren nach dem Umwandeln die Umlaute wieder vorhanden.

VG
Mitglied: Xaero1982
Xaero1982 28.02.2018 um 12:37:29 Uhr
Goto Top
Hi Uwe,

wie immer perfekt face-smile

Im Notepad++ zeigt er mir die Formatierungen auch richtig an. Die Dateien sind UTF-8 ohne BOM ursprünglich. Nach der Umwandlung sind sie im ANSI Format.

Danke dir!
Mitglied: Xaero1982
Xaero1982 28.02.2018 um 14:39:44 Uhr
Goto Top
Es gibt doch noch ein Problem...

Bei manchen Dateien steht weiterhin UTF-8 wenn ich das im Notepad++ kontrolliere. Auffallend ist dabei, dass diese Dateien alle keine Sonderzeichen haben.
Notepad++ doof oder was ist nun korrekt?
Mitglied: colinardo
colinardo 28.02.2018, aktualisiert am 01.03.2018 um 07:03:55 Uhr
Goto Top
Schau mit dem Hex-Editor rein dann weist du's (UTF-8 meist bis zu 4 bytes pro Zeichen, Ansi 2), ich hab keine deiner Files und weiß nicht wo du hin schaust ? Glaskugel ... face-smile.
https://de.wikipedia.org/wiki/UTF-8#Darstellung_in_Editoren
Mitglied: Xaero1982
Xaero1982 28.02.2018 um 23:29:02 Uhr
Goto Top
Notepad++ zeigt eben UTF8 an nach der Umwandlung, aber ich glaub das is wurscht. In den Dateien sind eh keine Umlaute und die Dateien mit Umlaute sind korrekt.

Hat sich also erstmal erledigt. Danke face-smile
Mitglied: rubberman
rubberman 01.03.2018 aktualisiert um 00:50:06 Uhr
Goto Top
Zitat von @Xaero1982:
Notepad++ zeigt eben UTF8 an nach der Umwandlung, aber ich glaub das is wurscht. In den Dateien sind eh keine Umlaute und die Dateien mit Umlaute sind korrekt.
UTF-8 und ASCII sind im Bereich der ASCII Zeichen deckungsgleich. Besitzt eine Datei weder ein Byte Order Mark, noch Zeichen die den ASCII Bereich überschreiten, dann kann kein Editor dort eine Unterscheidung treffen. Noch schlimmer ist es mit ANSI Codierten Dateien. Diese enthalten keinerlei Hinweis auf die Codierung. Was ein Editor hier außerhalb des ASCII Bereichs anzeigt, ist im Zweifelsfall falsch. Nur dann wenn das schreibende und das lesende Programm die gleiche Codierung verwendet, werden Zeichen korrekt angezeigt. Es ist also immer ratsam eine Unicode-unterstützende Codierung, wie UTF-8 oder (unter Windows verbreiteter) UTF-16 zu verwenden. Anderenfalls ist es immer davon abhängig, welche heuristischen/statistischen Algorithmen ein Editor nutzt um die Codierung zu "raten" oder ob bspw. die lokale ANSI Einstellung deines Windows Systems herangezogen wird. Das beantwortet dein
Notepad++ doof oder was ist nun korrekt?
Weder ist Notepad++ doof, noch ist UTF-8 richtig oder falsch. Solange der Text nur ASCII enthält, ist ASCII so richtig wie UTF-8 und so richtig wie jede beliebige ANSI Codepage.

Zitat von @colinardo:
(UTF-8 meist 4 bytes pro Zeichen, Ansi 2)
Weder noch. UTF-8 kann 1-4 Bytes pro Zeichen benötigen, wobei du kaum Zeichen in einer Datei haben wirst, die tatsächlich 4 Bytes breit sind. ANSI ist der zum Scheitern verurteilte Versuch, alle möglichen Zeichen nur mit einem Byte Breite zu speichern. Um das zu erreichen werden Code Pages oder Character Maps benötigt, die als Übersetzungstabellen zwischen dem gelesenen Byte und dem assoziierten Unicode Codepoint fungieren. Da es, wie oben geschrieben, keinen Handshake zwischen schreibenden und lesenden Programm gibt, ist es Glückssache wenn der Text richtig dargestellt wird.

Beispiel: Ein Russe schreibt das Zeichen д in den Windows Editor und speichert die Datei ANSI codiert. Seine ANSI Codepage ist standardmäßig 1251, somit steht das Byte E4 in der Datei. Bekommst du die Datei und öffnest sie, dann erscheint bei dir ein ä, da das E4 in deiner Standard Codepage (1252) eben als völlig anderes Zeichen interpretiert wird und der Editor keine Ahnung haben kann woher die Datei stammt und welche Codierung ursprünglich verwendet worden ist face-smile

Steffen