Из C ++ wchar_t в C # char через сокет - PullRequest
2 голосов
/ 03 июня 2009

В настоящее время я создаю приложение C ++, которое связывается через сокет с приложением C #. Мое приложение на C ++ отправляет wchar_t * через сокет.

Вот обзор того, что отправлено:

<!-- Normal xml file-- 

Вот то, что я получаю с другой стороны (я делаю stream.read в байтовый массив и использую UTF8Encoding.GetString () для преобразования байтового массива в читаемую строку)

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

Это проблема сортировки? Что ты говоришь? Почему он расширен 0 и почему символ Unicode не отображается на стороне C #?

1 Ответ

5 голосов
/ 03 июня 2009

Похоже, что он отправляет UTF-16, а не UTF-8, что имеет смысл - wchar_t в основном 16-битный тип (в Windows), и вы отправляете его в «сыром» виде, насколько я могу сказать. Я полагаю, что если вы собираетесь конвертировать данные в XDocument или XmlDocument, вы делаете это с двоичными данными - фреймворк знает, как автоматически определять UTF-16 для файлов XML (IIRC).

У вас могут возникнуть проблемы, если объявление XML объявит его как UTF-8, хотя на самом деле это UTF-16.

В качестве альтернативы используйте подходящие классы кодирования на стороне C ++, чтобы искренне отправлять UTF-8. Это займет дополнительное время обработки, но обычно экономит полосу пропускания, если это важно.

...