Вопрос

В настоящее время я создаю приложение на 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 #?

Это было полезно?

Решение

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top