2016-07-28 7 views
0

Ich habe eine Klasse, die eine andere Klasse verwendet, die eine Textdatei liest. Die Textdatei wird in Ascii oder CP1525 geschrieben.Konvertieren Sie eine Zeichenfolge, die bereits fehlerhaft ist

Hintergrundinfo: Die Textdatei wird in Axapta und verwendet die ASCIIio Klasse erzeugt, die den Text unter Verwendung der writeRaw Methode

Die Klasse, die ich von einem Kollegen ist verwende schreibt und er ein C# Stream verwendet um Dateien zu lesen. Normalerweise funktioniert das in Ordnung, weil die Dateien in UTF8 geschrieben sind, aber in diesem Fall ist es nicht.

Also der Streamreader liest die Datei als UTF8 und übergibt die gelesene Zeichenfolge an mich. Ich habe jetzt einige Buchstaben, wie zum Beispiel den Lating kleinen Buchstaben o mit Diaeresis (ö), die nicht so formatiert sind, wie ich sie brauchen würde.

Eine einfache Konvertierung der Zeichenfolge hilft in diesem Fall nicht und ich kann nicht herausfinden, wie ich die richtigen Buchstaben bekommen kann.

Das ist also im Grunde, wie er liest es:

char quotationChar = '"'; 
String line = ""; 
using (StreamReader reader = new StreamReader(fileName)) 
{ 
    if((line = reader.ReadLine()) != null) 
    { 
     line = line.Replace(quotationChar.ToString(), ""); 
    } 
} 
return line; 

Was jetzt geschieht, in der Textdatei ich das Deutsch Wort „Röhre“ habe, die, nachdem sie mit der Stream lesen, Rhre verwandelt (was in einer Datenbank blöd aussieht).

konnte ich versuchen, jeden Brief zu konvertieren

Encoding enc = Encoding.GetEncoding(1252); 
byte[] utf8_Bytes = new byte[line.Length]; 
for (int i = 0; i < line.Length; ++i) 
{ 
    utf8_Bytes[i] = (byte)line[i]; 
} 
String propEncodeString = enc.GetString(utf8_Bytes, 0, utf8_Bytes.Length); 

Das ist mir nicht den richtigen Charakter nicht geben!

byte[] myarr = Encoding.UTF8.GetBytes(line); 
String propEncodeString = enc.GetString(myarr); 

, das auch das falsche Zeichen zurückgibt.

ich weiß, dass ich nur das Problem dies durch den Einsatz lösen könnte:

using (StreamReader reader = new StreamReader(fileName, Encoding.Default, true)) 

Aber nur zum Spaß: Wie kann ich die richtige Zeichenfolge aus einem bereits falsch decodierte String bekommen?

Antwort

1

Sobald die Konvertierung von UTF8 nach ASCII erfolgt ist, werden alle Zeichen, die nicht den gültigen ASCII-Einträgen entsprechen, durch das gleiche fehlerhafte Datenzeichen ersetzt, was bedeutet, dass Daten einfach verloren gehen und Sie nicht einfach 'konvertieren' können zurück zu einem guten Charakter downstream. Siehe dieses Beispiel: https://dotnetfiddle.net/XWysml

+0

Ich kam von ASCII und konvertiert es in UTF8 nicht umgekehrt. Aber das Problem bleibt dasselbe, das ich kenne. – Bongo

+1

@Bongo UTF8 hat ein Zeichen "Ich weiß nicht, was das ist", das die missverstandenen Bytes ersetzt. Es ist wie das Ausmalen von seltsamen Bildern in rot mit Farbe und dann fragen, was darunter ist? –

Verwandte Themen