تطبيع سلسلة Unicode في C/C++
-
28-10-2019 - |
سؤال
أتساءل عن كيفية تطبيع السلاسل (التي تحتوي على utf-8/utf-16) في C/C++.في .NET هناك وظيفة سلسلة.تطبيع .
لقد استخدمت UTF8-CPP في الماضي ولكنه لا يوفر مثل هذه الوظيفة.وحدة العناية المركزة و Qt يوفران تطبيع السلسلة ولكني أفضل الحلول خفيفة الوزن.
هل هناك أي حل "خفيف الوزن" لهذا؟
نصائح أخرى
بالنسبة لنظام التشغيل Windows، يوجد NormalizeString()
الوظيفة (لسوء الحظ لنظام التشغيل Vista والإصدارات الأحدث فقط - بقدر ما أرى على MSDN):
http://msdn.microsoft.com/en-us/library/windows/desktop/dd319093%28v=vs.85%29.aspx
إنها أبسط طريقة وجدتها حتى الآن.أعتقد أنها خفيفة الوزن جدًا أيضًا.
int NormalizeString(
_In_ NORM_FORM NormForm,
_In_ LPCWSTR lpSrcString,
_In_ int cwSrcLength,
_Out_opt_ LPWSTR lpDstString,
_In_ int cwDstLength
);
يمكنك إنشاء وحدة العناية المركزة بأدنى حد (أو ربما لا توجد بيانات أخرى - أعتقد أن جميع بيانات التطبيع داخلية الآن) ، ثم الارتباط بشكل ثابت.لم أجرب هذا مؤخرًا ، لكنني أعتقد أن الحجم الإجمالي صغير جدًا في هذه الحالة.
تعني كلمة "خفيف" في سياقك "ذات وظائف محدودة".سأستخدم مصدر وحدة العناية المركزة كمثال ، ومرجع إلى http://unicode.org/reports/tr15/ لتنفيذ هذه الوظيفة "خفيفة الوزن".
حل جيد لـ UTF-8 هو دالة g_utf8_normalize () .قد يتطلب تحويل std :: wstring إلى std :: string (utf16 to utf8) إذا كنت بحاجة إلى هذا من أجل wstring أيضًا (مما سيجعله حلاً مكلفًا للغاية ، ومن ثم أبحث عن حل أفضل ، إن أمكن مع خالصC ++ (11) تعني).