Pergunta

Atualmente, estou construindo uma aplicação C ++ que se comunicam através da tomada de uma aplicação C #. Meu aplicativo C ++ envia * wchar_t via socket.

Aqui está uma visão geral do que é enviar:

<!-- Normal xml file-- 

Aqui está o que eu recebo do outro lado (eu faço um stream.read para um array de bytes e uso UTF8Encoding.GetString () para converter a matriz de bytes para uma string legível)

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

É um problema de empacotamento? O que você disse? Por que é 0 estendida e por unicode caracter não aparecer no lado do C #?

Foi útil?

Solução

Parece que ele está enviando UTF-16, não UTF-8, o que faz sentido - wchar_t é basicamente um tipo de 16 bits (no Windows), e você está enviando-o para baixo "raw", tanto quanto eu posso dizer. Eu sugiro que se você estiver indo para converter os dados em um XDocument ou XmlDocument, você fazê-lo com os dados binários - o quadro sabe como detectar automaticamente UTF-16 para arquivos XML (IIRC)

.

Você vai potencialmente ter problemas se a declaração XML declara ser UTF-8 quando é realmente UTF-16 embora.

Em alternativa, utilizar as classes de codificação adequados no lado do C ++ para genuinamente envio UTF-8. Isso levaria tempo de processamento extra, mas geralmente economizar largura de banda, se isso é uma consideração.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top