Von C ++ Wchar_t bis C # char über die Buchse
-
09-09-2019 - |
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?
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.