سؤال

ما هو أفضل ممارسة Unicode المعالجة في C++?

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

المحلول

  • استخدام وحدة العناية المركزة التعامل مع البيانات الخاصة بك (أو مكتبة مماثلة)
  • الخاصة بك في مخزن البيانات ، تأكد من أن يتم تخزين كل شيء في نفس الترميز
  • تأكد من أنك دائما باستخدام unicode مكتبة المهام الدنيوية مثل طول سلسلة القيمة السوقية ، حالة ، إلخ.أبدا استخدام المكتبة القياسية builtins مثل is_alpha إلا إذا كان هذا هو تعريف تريد.
  • لا أستطيع أن أقول ما يكفي: لم يكرر أكثر من المؤشرات من string إذا كنت الرعاية حول صحة دائما استخدام unicode المكتبة من أجل هذا.

نصائح أخرى

إذا كنت لا تهتم حول التوافق مع السابقة C++ المعايير الحالية C++11 القياسية وقد بنيت في دعم يونيكود: http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2011/n3242.pdf

لذلك حقا أفضل الممارسات Unicode المعالجة في C++ استخدام المدمج في المرافق له.هذا ليس دائما إمكانية مع كبار السن قواعد رمز مع معيار كوني جديد في الوقت الحاضر.

تحرير:لتوضيح, C++11 Unicode علم في أن لديها الآن دعم يونيكود حرفية و سلاسل Unicode.ومع ذلك ، فإن المكتبة القياسية فقط دعم محدود Unicode المعالجة والتحويل.لاحتياجاتك الحالية قد يكون هذا كافيا.ومع ذلك ، إذا كنت بحاجة إلى القيام به كمية كبيرة من الأحمال الثقيلة الآن ثم قد لا تزال بحاجة إلى استخدام شيء من هذا القبيل وحدة العناية المركزة لمزيد من عمق المعالجة.هناك بعض المقترحات حاليا يعمل لتشمل المزيد من الدعم القوي للنص التحويل بين مختلف ترميزات.تخميني (الأمل) هو أن هذا سيكون الجزء القادم التقرير الفني.

شركتنا (وغيرها) استخدام المصدر المفتوح اخلاقنا مكونات Unicode (ICU) المكتبة وضعت أصلا من قبل Taligent.

أنه يتعامل مع سلاسل, لغات, التحويلات, تاريخ/مرات, الترتيب, التحولات, et.al.

نبدأ مع وحدة العناية المركزة Userguide

إليك قائمة ويندوز البرمجة:

  • جميع السلاسل المغلقة في _T("my string")
  • strlen() إلخ.وظائف استبدال _tcslen() إلخ.
  • استخدام LPTSTR و LPCTSTR بدلا من شار * و const char *
  • عند بدء مشاريع جديدة في استوديو ديف, دينيا تأكد Unicode الخيار المحدد في خصائص المشروع.
  • C++ سلاسل استخدام std::wstring بدلا من std::string

انظر قضية حساسة سلسلة المقارنة في C++

هذا السؤال يحتوي على ارتباط إلى وثائق Microsoft على Unicode: http://msdn.microsoft.com/en-us/library/cc194799.aspx

إذا كنت تبحث عن التنقل الأيمن الجانب على MSDN التالي على تلك المادة ، يجب أن تجد الكثير من المعلومات المتعلقة Unicode وظائف.بل هو جزء من فصل في "ترميز أحرف" (http://msdn.microsoft.com/en-us/library/cc194786.aspx)

وقد الأقسام الفرعية التالية:

  • رمز صفحة نموذج
  • أحرف مزدوجة البايت مجموعات في ويندوز
  • Unicode
  • قضايا التوافق في البيئات المختلطة
  • Unicode تحويل البيانات
  • ترحيل البرامج المستندة إلى Windows إلى Unicode
  • ملخص

على الرغم من أن هذا قد لا يكون أفضل الممارسات للجميع, يمكنك كتابة الخاصة بك C++ UNICODE الروتين إذا كنت تريد!

لقد انتهيت للتو من القيام به على مدى عطلة نهاية الاسبوع.لقد تعلمت الكثير, على الرغم من أنني لا نضمن انها 100 ٪ مجانا علة, لقد فعلت الكثير من التجارب و يبدو للعمل بشكل صحيح.

قانون بلدي هو تحت رخصة BSD و يمكن العثور عليها هنا:

http://code.google.com/p/netwidecc/downloads/list

ويسمى WSUCONV و يأتي مع عينة الرئيسي() برنامج تحويل بين UTF-8 و UTF-16 و ASCII القياسية.إذا كنت رمي بعيدا رمز الرئيسي لديك لطيفة مكتبة للقراءة / الكتابة UNICODE.

كما قيل أعلاه مكتبة هو أفضل رهان عند استخدام نظام كبير.ولكن في بعض الأحيان كنت لا تريد للتعامل مع الأشياء الذاتية الخاصة بك (ربما لأن المكتبة استخدام العديد من الموارد مثل على التحكم الجزئي).في هذه الحالة تريد بسيط المكتبة التي يمكنك نسخ أجزاء من الأشياء التي تحتاج فعلا.

الصفصاف Schlanger المثال التعليمات البرمجية يبدو مثل فكرة جيدة (انظر جوابه لمزيد من التفاصيل).

كما أنني وجدت واحدة أخرى أصغر رمز ، لكنه يفتقر كامل تدقيق الأخطاء فقط مقابض UTF-8 ولكن كان أبسط من أن تأخذ أجزاء من.

هنا قائمة جزءا لا يتجزأ من المكتبات التي تبدو لائقة.

جزءا لا يتجزأ من المكتبات

إلقاء نظرة على توصيات UTF-8 في كل مكان

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