Domanda

Al momento sto costruendo un applicazione C ++ che comunicano tramite presa a un'applicazione C #. La mia app C ++ manda wchar_t * tramite presa.

Ecco una panoramica di ciò che è inviare:

<!-- Normal xml file-- 

Ecco quello che ricevo sul lato opposto (faccio uno stream.read ad un array di byte e l'uso UTF8Encoding.GetString () per convertire la matrice di byte in una stringa leggibile)

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

E 'un problema di smistamento? Che ne dici? Perché è 0 esteso e perché unicode caracter non compare sul lato C #?

È stato utile?

Soluzione

Sembra che è l'invio di UTF-16, UTF-8, che ha un senso - wchar_t è fondamentalmente un tipo a 16 bit (in Windows), e si sta inviando in giù "raw", per quanto posso dire. Suggerisco che se avete intenzione di convertire i dati in un XDocument o XmlDocument, lo si fa con i dati binari - il quadro sa autodetect UTF-16 per i file XML (IIRC)

.

Avrete potenzialmente avere problemi se la dichiarazione XML dichiara di essere UTF-8, quando è veramente UTF-16 però.

In alternativa, utilizzare le classi di codifica adatti sul lato ++ C veramente invia UTF-8. Questo sarebbe voluto del tempo di elaborazione supplementare, ma di solito risparmiare larghezza di banda, se questa è una considerazione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top