سؤال

أنا حاليا بناء تطبيق 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. هذا من شأنه أن يستغرق وقتا طويلا للمعالجة، ولكن عادة ما يوفر عرض النطاق الترددي إذا كان هذا هو الاعتبار.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top