Entwickler-Ecke

IO, XML und Registry - Problem mit Zeichenkodierung beim File Transfer


yndaso - So 28.03.10 16:28
Titel: Problem mit Zeichenkodierung beim File Transfer
Hallo,
ich habe auf einem ftp Laufwerk eine xml Datei liegen. Diese übertrage ich auf
meinen PC und gebe den Inhalt anschließend in meiner Anwendung aus.

Ich habe aber nun gemerkt. Das die Datei auf dem Netzlaufwerk mit der Kopie nicht
übereinstimmt, da die Sonderzeichen ("Ü",...) durch merkwürdige Zeichen ersetzt sind.

So nun wird es vermutlich um ein Codierungsproblem handeln.
Wie kann ich überhaupt feststellen, welche Zeichenkodierung die xml Datei auf dem
Netzlaufwerk hat?

Hier mal mein Code mit dem ich die Datei übertrage:

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
ftpAddress = Url.ToString();
file = m_fileNames[iCounter].ToString();
newFileData = request.DownloadData(ftpAddress);
fileString = System.Text.Encoding.UTF8.GetString(newFileData);
fileString.Replace('\r''\n');
StreamWriter sw = new StreamWriter(file, false, Encoding.UTF8);
sw.Write(fileString);
sw.Close();


Oder muss ich was an meinem Code ändern?
Vorab Danke


norman2306 - So 28.03.10 16:31

Du gibtst doch die Codierung mit UTF8 vor...


yndaso - So 28.03.10 16:35

user profile iconnorman2306 hat folgendes geschrieben Zum zitierten Posting springen:
Du gibtst doch die Codierung mit UTF8 vor...


Was sollte ich denn stattdessen vorgeben? Damit Sonderzeichen auch Sonderzeichen bleiben?


Kha - So 28.03.10 16:56

user profile iconyndaso hat folgendes geschrieben Zum zitierten Posting springen:
Wie kann ich überhaupt feststellen, welche Zeichenkodierung die xml Datei auf dem
Netzlaufwerk hat?
Du öffnest sie einmal von Hand ;) ? Notepad++ zeigt dann die Enkodierung z.B. unter "Format" an, VS unter "File -> Advanced Save Options" - falls sie richtig geraten haben. Mit dem richtigen BOM schafft das auch der StreamReader, ANSI wird er allerdings nie automatisch erkennen.


norman2306 - So 28.03.10 17:03

Die Frage ist nicht ganz korrekt. Du kannst vorgeben was du möchtest. UTF8 enthält Sonderzeichencodierung. Hast du die mal gecheckt, was in fileString drin steht, bevor du schreibst?


yndaso - So 28.03.10 17:06

user profile iconnorman2306 hat folgendes geschrieben Zum zitierten Posting springen:
Die Frage ist nicht ganz korrekt. Du kannst vorgeben was du möchtest. UTF8 enthält Sonderzeichencodierung. Hast du die mal gecheckt, was in fileString drin steht, bevor du schreibst?

In FileString steht vor dem Schreiben statt dem ü ein anderes Zeichen (Viereck?)


norman2306 - So 28.03.10 17:09

ok, dann würde ich mal sagen, du machst ein falsches Encoding...


C#-Quelltext
1:
fileString = System.Text.Encoding.UTF8.GetString(newFileData);                    


macht es click?


yndaso - So 28.03.10 17:09

user profile iconKha hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconyndaso hat folgendes geschrieben Zum zitierten Posting springen:
Wie kann ich überhaupt feststellen, welche Zeichenkodierung die xml Datei auf dem
Netzlaufwerk hat?
Du öffnest sie einmal von Hand ;) ? Notepad++ zeigt dann die Enkodierung z.B. unter "Format" an, VS unter "File -> Advanced Save Options" - falls sie richtig geraten haben. Mit dem richtigen BOM schafft das auch der StreamReader, ANSI wird er allerdings nie automatisch erkennen.

Hab die Datei im VS geöffnet: ISO - 28591...


JüTho - So 28.03.10 18:22

Dann hast du doch die Lösung:

C#-Quelltext
1:
GetEncoding(28591);                    

Die ganze Liste steht übrigens im Beispiel unter Encoding.GetEncodings.

Jürgen


yndaso - So 28.03.10 18:32

Danke!
Klappt nun...