UTF32 und C # Probleme

8

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!

    
AStupidNoob 03.04.2012, 05:44
quelle

5 Antworten

5

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:

%Vor%

und das gibt eine Zeichenfolge mit den Ersatzpaaren zurück. Behandle es als ein Zeichen.

Siehe hier:

Ссылка

Ссылка

Ich hoffe, es hilft jemandem: D

    
AStupidNoob 09.04.2012, 02:03
quelle
1

Ich habe es versucht und es funktioniert gut auf meinem PC.

%Vor%

Vielleicht ist der Text, den Sie in UTF32 finden, nicht .

    
Chibueze Opata 03.04.2012 07:11
quelle
0

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).

    
Sani Singh Huttunen 03.04.2012 06:01
quelle
0

Ich denke, Sie müssen dieselbe Codierung ( Encoding.UTF32 ) auch für Ihre StreamWriter angeben.

BEARBEITEN:

Normalerweise wird es nicht zwischen UTF-Codepages benötigt, aber ich würde es auch versuchen:

%Vor%     
Dummy01 03.04.2012 06:06
quelle
0

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.

    
Tanzelax 03.04.2012 07:16
quelle

Tags und Links