Frage

Ich bin derzeit der Aufbau eine C ++ Anwendung, die über die Buchse auf eine C # .NET-Anwendung kommunizieren. Meine C ++ App sendet wchar_t * über die Buchse.

Hier ist ein Überblick, was senden ist:

<!-- Normal xml file-- 
Hier

ist, was ich auf der anderen Seite empfangen (Ich mache stream.read zu einem Byte-Array und Verwendung UTF8Encoding.GetString (), um den Byte-Array in ein lesbaren Zeichenfolge zu konvertieren)

<\0!\0-\0-\0 \0N\0o\0r\0m\0a\0l\0 \0x\0m\0l\0 \0f\0i\0l\0e\0-\0-

Ist es ein Rangier-Problem? Was sagst du? Warum ist es 0 erweitert und warum Unicode caracter erscheint nicht auf der C # Seite?

War es hilfreich?

Lösung

Sieht aus wie es schickt UTF-16, nicht UTF-8, was Sinn macht - wchar_t ist im Grunde ein 16-Bit-Typ (in Windows), und Sie senden es nach unten „raw“, soweit ich das beurteilen kann. Ich schlage vor, dass, wenn Sie gehen, um die Daten in einem XDocument oder XmlDocument konvertieren, können Sie es mit den binären Daten tun - der Rahmen weiß, wie UTF-16 für XML-Dateien automatisch zu erkennen (IIRC)

.

Sie werden möglicherweise Probleme haben, wenn die XML-Deklaration es UTF-8 sein erklärt, wenn es wirklich UTF-16 though.

Alternativ können Sie geeignete Codierung Klassen auf der C ++ Seite wirklich senden UTF-8. Dies würde zusätzliche Verarbeitungs Zeit dauern, aber in der Regel Bandbreite sparen, wenn das ist eine Überlegung.

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