Da C wchar_t ++ a C # char tramite presa
-
09-09-2019 - |
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 #?
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.