سؤال

عند نقل مشروع C ++ الخاص بي إلى GCC ، اكتشفت أن نوع بيانات WCHAR_T هو 4-بايت UTF-32 افتراضيًا. يمكنني تجاوز ذلك مع خيار برنامج التحويل البرمجي ، ولكن بعد ذلك ، أصبح جزء WCS* (WCSLEN ، WCSCMP ، وما إلى ذلك) من RTL غير صالح للاستخدام ، لأنه يفترض سلاسل واسعة 4 بايت.

في الوقت الحالي ، قمت بإعادة تنفيذ 5-6 من هذه الوظائف من نقطة الصفر ووحيد تطبيقاتي فيه. ولكن هل هناك خيار أكثر أناقة-على سبيل المثال ، بناء من GCC RTL مع 2 بايت WCHAR-T يجلس بهدوء في مكان ما ، في انتظار ذلك تكون مرتبطة؟

النكهات المحددة لـ GCC التي أنا بعدها هي Xcode على Mac OS X ، Cygwin ، والنكهات التي تأتي مع حفر Debian Linux.

هل كانت مفيدة؟

المحلول 4

إعادة تنفيذ 5-6 من وظائف WCS الأكثر شيوعا ، #محددة تطبيقاتي في.

نصائح أخرى

ولكن هل هناك خيار أكثر أناقة-على سبيل المثال ، بناء من GCC RTL مع 2-بايت WCHAR-T يجلس بهدوء في مكان ما ، في انتظار ربطه؟

لا ، هذه مشكلة خاصة منصة ، وليس مشكلة في مجلس التعاون الخليجي.

وهذا يعني أن منصة Linux ABI تحدد ذلك wchar_t هو 32 بتات ، لذلك إما عليك استخدام مكتبة جديدة كاملة (التي تعد وحدة العناية المركزة لها خيارًا شائعًا) ، أو قم بتوصيل الكود الخاص بك للتعامل مع 4 بايت wchar_tس. جميع المكتبات التي قد تربطها ستفترض أيضًا 4 بايت wchar_t, ، و إرادة استراحة إذا كنت تستخدم GCC's -fshort-wchar.

ولكن على Linux على وجه التحديد ، قام كل شخص تقريبًا بتوحيد على UTF-8 لجميع الترميزات المتعددة.

انظر الى مكتبة وحدة العناية المركزة. إنها مكتبة محمولة مع واجهة برمجة تطبيقات UTF-16.

كما لاحظت ، يتم تعريف WCHAR_T. لا توجد طريقة للعمل المحمول مع نوع البيانات هذا.

كانت شركة Linux Systems بشكل عام تتمتع بميزة الحصول على دعم Unicode لاحقًا ، بعد إعلان كارثة UCS-2 بأكملها أنها فكرة غير رائعة ، واستخدم UTF-8 كترميز. لا تزال جميع واجهات برمجة تطبيقات النظام تعمل على char*، وهي آمنة.

أفضل رهاناتك هي استخدام مكتبة تدير هذا لك: QT ، وحدة العناية المركزة ، إلخ.

لاحظ أن Cygwin يتميز بـ 2 بايت WCHAR_T لجعل meshing مع Windows أسهل.

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