كيفية استخدام MultiByteToWideChar بشكل صحيح
-
21-12-2019 - |
سؤال
أنا أستخدم MultiByteToWideChar لتحويل سلسلتي إلى سلسلة.أحاول أولاً الحصول على الحجم المطلوب لخيطي.وفقًا للوثائق، فإن تمرير 0 كوسيطة أخيرة يجب أن ينجز هذا.استخدام MultiByteToWideChar(CP_UTF8, MB_COMPOSITE, str.c_str(), -1, nullptr, 0);
تُرجع 0 بالحجم المطلوب للمخزن المؤقت للسلسلة.لقد تحققت من أن str هي سلسلة غير فارغة أيضًا.ما الخطأ الذي أفعله هنا؟
المحلول
من وثائق MSDN:
بالنسبة إلى UTF-8 أو صفحة الرموز 54936 (GB18030، بدءًا من نظام التشغيل Windows Vista)، يجب تعيين dwFlags إما على 0 أو MB_ERR_INVALID_CHARS.وإلا، ستفشل الوظيفة مع ERROR_INVALID_FLAGS.
أنت تستخدم CP_UTF8 ولكنك تمرر أيضًا علامة MB_COMPOSITE، ولهذا السبب يفشل.
لا تنتمي إلى StackOverflow