من C ++ Wchar_t إلى C # Char عبر المقبس
-
09-09-2019 - |
سؤال
أنا حاليا بناء تطبيق C ++ الذي يتصل عبر مأخذ في تطبيق C #. يرسل تطبيق C ++ الخاص بي Wchar_T * عبر المقبس.
فيما يلي نظرة عامة على ما يرسل:
<!-- Normal xml file--
فيما يلي ما أتلقىه على الجانب الآخر (أفعل دفقا.ريد إلى صفيف بايت واستخدم UTF8Encoding.getStString () لتحويل صفيف البايت إلى سلسلة قابلة للقراءة)
<\0!\0-\0-\0 \0N\0o\0r\0m\0a\0l\0 \0x\0m\0l\0 \0f\0i\0l\0e\0-\0-
هل هي مشكلة في الهجوم؟ ماذا تقول؟ لماذا هو 0 ممتد ولماذا لا يظهر Unicode Cracter على الجانب C #؟
المحلول
يبدو أنه يرسل UTF-16، وليس UTF-8، مما يجعل المنطقي - wchar_t
هو أساسا نوع 16 بت (في ويندوز)، وأنت ترسله "الخام" بقدر ما أستطيع أن أقول. أقترح أنه إذا كنت ستحول البيانات إلى XDocument
أو XmlDocument
, ، يمكنك القيام بذلك بالبيانات الثنائية - يعلم الإطار كيفية تلقائي UTF-16 لملفات XML (IIRC).
من المحتمل أن يكون لديك مشاكل إذا أعلن إعلان XML أنه UTF-8 عندما يكون UTF-16 حقا.
بدلا من ذلك، استخدم فئات ترميز مناسبة على جانب C ++ إلى بصدق إرسال UTF-8. هذا من شأنه أن يستغرق وقتا طويلا للمعالجة، ولكن عادة ما يوفر عرض النطاق الترددي إذا كان هذا هو الاعتبار.