هل هناك حتى تنفيذ سريع حول سلسلة الأحرف متعددة الحرف تحويل إلى Unicode WSTRING؟

StackOverflow https://stackoverflow.com/questions/2145862

  •  23-09-2019
  •  | 
  •  

سؤال

في مشروعي ، حيث اعتمدت خوارزمية Aho-Corasick للقيام ببعض وضع تصفية الرسائل في جانب الخادم ، فإن رسالة GOT GET هي سلسلة من حرف متعدد. ولكن بعد عدة اختبارات ، وجدت أن عنق الزجاجة هو التحويل بين سلسلة Mulitbyte و Unicode Wstring. ما أستخدمه الآن هو زوج MBSTOWCS_S و WCSTOMBS_S ، والذي يستغرق ما يقرب من 95 ٪ من تكلفة الوضع بأكمله. أيضًا ، لقد جربت MultiByTeToWidechar/Widechartomultibyte ، فقد حصلت على نفس النتيجة. لذلك أتساءل عما إذا كانت هناك طريقة أخرى أكثر كفاءة للقيام بهذه المهمة؟ تم تصميم مشروعي في VS2005 ، وسيحتوي السلسلة المحولة على أحرف صينية. شكرا جزيلا.

لا يوجد حل صحيح

نصائح أخرى

هناك عدد من الاحتمالات.

أولاً ، ماذا تقصد بـ "شخصية متعددة البايت"؟ هل تقصد UTF8 أو نظام ISO DBCS؟

إذا نظرت إلى تعريف UTF8 و UTF16 ، هناك مجال للقيام بتحويل محسّن للغاية ، وقم بتمزيق البتات "X" وإعادة تنسيقها. انظر على سبيل المثال http://www.faqs.org/rfcs/rfc2044.html يتحدث عن UTF8 <==> UTF32. سيكون ضبط UTF16 بسيطًا.

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

إذا فشل كل شيء آخر ، فهناك خوارزميات سلسلة أخرى غير Aho-Corasick. ربما ابحث عن خوارزمية تعمل مع ترميزك الأصلي.

تمت إضافة 29 يناير 2010] انظر http://www.cl.cam.ac.uk/~mgk25/ucs/utf-8-history.txt لمعرفة المزيد عن التحويلات ، بما في ذلك تطبيقان C من MBTOWC () و WCTOMB (). تم تصميم هذه للعمل مع WCHAR_TS كبير بشكل تعسفي. إذا كان لديك فقط WCHAR_TS 16 بت ، فيمكنك تبسيطه كثيرًا.

ستكون هذه أسرع بكثير من الإصدارات العامة (التي تُحسى صفحة الكود) في المكتبة القياسية.

تم إهماله (على ما أظن) ولكن يمكنك دائمًا استخدام الإصدارات غير الآمنة (MBSTOWCS و WCSTOMBS). لست متأكدًا مما إذا كان هذا سيكون له تحسن ملحوظ. بدلاً من ذلك ، إذا كانت مجموعة الأحرف الخاصة بك محدودة (A - Z ، 0 - 9 ، على سبيل المثال) ، يمكنك دائمًا القيام بذلك يدويًا باستخدام جدول البحث ..؟

ربما يمكنك تقليل كمية المكالمات إلى MultibyTeTowIdechar؟

من المحتمل أيضًا أن تعتمد Aho-Corasick للعمل مباشرة على سلاسل متعددة.

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