Frage

Zum Beispiel: „½“ oder ASCII Dezember 189. Wenn ich lese das Bytes aus einer Textdatei der byte [] den gültigen Wert enthalten, in diesem Fall 189.

Die Umstellung auf Unicode Ergebnisse im Unicode-Ersatzzeichen 65533.

  

UnicodeEncoding.Unicode.GetString (b);

Umwandlung in ASCII-Ergebnisse in 63 oder "?"

  

ASCIIEncoding.ASCII.GetString (b);

Wenn dies nicht möglich ist, was der beste Weg ist, diese Daten zu handhaben? Ich möchte in der Lage sein String-Funktionen auszuführen, wie Replace ().

War es hilfreich?

Lösung

Byte 189 stellt eine "½" in iso-8859-1 (auch bekannt als "Latin-1"), so dass die folgende ist vielleicht, was Sie wollen:

var e = Encoding.GetEncoding("iso-8859-1");
var s = e.GetString(new byte[] { 189 });

Alle Strings und Zeichen in .NET sind UTF-16 codiert werden, so benötigen Sie einen Encoder / Decoder zu verwenden, etwas anderes zu konvertieren, manchmal vorbelegt (zB UTF-8 für Filestream-Instanzen), aber gute Praxis ist es, immer angeben .

Sie werden irgendeine Form von impliziten oder (besser) expliziten Metadaten müssen Sie mit den Informationen über die Codierung liefern.

Andere Tipps

Es hängt davon ab, genau das, was die Codierung ist.

Es gibt nicht so etwas wie „ASCII 189“ - ASCII geht nur bis zu 127. Es gibt viele Kodierungen, die eine 8-Bit-Verschlüsselungen mit ASCII für die ersten 128 Werte

.

Sie können wollen Encoding.Default (die Standard-Kodierung für Ihr spezielles System ist), aber es ist schwer, sicher zu wissen. Wo haben Sie Ihre Daten stammen aus?

Der alte PC-8 oder erweiterten ASCII-Zeichensatz wurde um vor IBM und Microsoft die Idee der Code-Seiten zur PC-Welt eingeführt. Dies wurde ASCII Erweitert - im Jahr 1982. In der Tat war es das einzige Zeichen auf PC in der zur Verfügung stehenden Zeit eingestellt, bis die EGA-Karte Ihnen andere Schriftarten in zu VRAM laden erlaubt

.

Dies war auch der Standard-Standard für die ANSI-Terminals und fast jedes BBS ich in den 80er Jahren gewählt und frühen 90er Jahren verwendet, um dieses Zeichensatz für Menüs und Boxen angezeigt werden.

Hier ist der Code 8-Bit erweiterten ASCII wiederum in Unicode-Text. Notieren Sie sich den Schlüssel Stück Code: die GetEncoding ( "437"). Das verwendete Codeseite 437 der 8-Bit-ASCII-Text in die Unicode-Entsprechung zu übersetzen.

    string ASCII8ToString(byte[] ASCIIData)
    {
        var e = Encoding.GetEncoding("437");
        return e.GetString(ASCIIData);
    }

System.String[] kann nicht speichern Zeichen mit ASCII > 127 wenn Sie auf irgendwelchen erweiterten ASCII-Zeichen zu arbeiten wie œ ¢ ½ ¾ hier ist die Methode wandeln sie in ihrer binären und dezimalen versuchen Äquivalent

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top