Ich habe also Probleme mit der Zeichencodierung. Wenn ich die folgenden zwei Zeichen in eine UTF32-kodierte Textdatei einfüge:
%Vor%und dann diesen Code für sie ausführen:
%Vor%Ich bekomme:
%Vor%(dasselbe Zeichen zweimal, d. h. die Eingabedatei! = Ausgabe)
Ein paar Dinge, die helfen könnten: Hex für das erste Zeichen:
15 9E 02 00
Und für die Sekunde:
15 9E 00 00
Ich benutze gedit für die Erstellung der Textdatei, mono für die C # und ich benutze Ubuntu.
Es spielt auch keine Rolle, ob ich die Kodierung für die Eingabe- oder Ausgabedatei festlege, es mag es einfach nicht, wenn es in der UTF32-Kodierung ist. Es funktioniert, wenn die Eingabedatei in UTF-8-Codierung ist.
Die Eingabedatei ist wie folgt:
FF FE 00 00 15 9 E 02 00 0 A 00 00 00 15 9 E 00 00 0 A 00 00 00
Ist es ein Fehler, oder ist es nur ich?
Danke!
K, also habe ich es herausgefunden, denke ich, es scheint jetzt zu funktionieren. Da die Codes für die Charaktere 15 9E 02 00 und 15 9E 00 00 sind, gibt es keine Möglichkeit, sie in einem einzigen UTF-16 char
zu halten. Stattdessen verwendet UTF16 stattdessen diese Ersatzpaare, bei denen zwei verschiedene Zeichen als ein "Element" fungieren. Um Elemente zu erhalten, können wir verwenden:
und das gibt eine Zeichenfolge mit den Ersatzpaaren zurück. Behandle es als ein Zeichen.
Siehe hier:
Ich hoffe, es hilft jemandem: D
Ich habe es versucht und es funktioniert gut auf meinem PC.
%Vor%Vielleicht ist der Text, den Sie in UTF32 finden, nicht .
Beim Schreiben geben Sie nicht UTF-32 an, daher wird standardmäßig Encoding.UTF8 verwendet.
Von MSDN :
Dieser Konstruktor erstellt einen StreamWriter mit UTF-8-Codierung ohne a Byte-Order Mark (BOM), so dass die GetPreamble-Methode ein leeres Byte zurückgibt Array. Um einen StreamWriter mit UTF-8-Codierung und einer Stückliste zu erstellen, Erwägen Sie die Verwendung eines Konstruktors, der die Codierung angibt, z StreamWriter (String, Boolean, Encoding).
Im Abschnitt "Bemerkungen" von MSDN für den StreamReader-Konstruktor :
Dieser Konstruktor initialisiert die Codierung, wie durch die Codierung angegeben Parameter und die interne Puffergröße auf 1024 Bytes. Das Das StreamReader-Objekt versucht, die Codierung zu erkennen, indem es auf die die ersten drei Bytes des Streams. Es erkennt automatisch UTF-8, Little-Endian-Unicode und Big-Endian-Unicode-Text, wenn die Datei gestartet wird mit den entsprechenden Byte-Reihenfolge Marken. Andernfalls wird der Benutzer bereitgestellt Codierung wird verwendet. Weitere Informationen finden Sie in der Encoding.GetPreamble-Methode Informationen.
Sehr wahrscheinlich weisen die Byte-Reihenfolgezeichen am Anfang der Datei auf UTF 16 (oder etwas) hin und verwenden daher nicht Ihre explizit angegebene UTF 32-Codierung.