سؤال

أنا أبحث في استخدام وحدة العناية المركزة لمعالجة سلسلة Unicode في وحدة Node.js الأصلية لأنه يبدو لي ذلك v8::String (بالنسبة الى هذه المستندات) ليس لديه API C ++ لهذا الغرض.

على حد علمي يتوقع V8 UTF-16 في ExternalStringResource وواجهة برمجة التطبيقات الأخرى ، لذلك أود استخدام وحدة العناية المركزة لمعالجة UTF-16.
أنا على وجه التحديد بحاجة إلى:

  • التكرار على الأحرف (وليس فقط وحدات رمز 16 بت) لسلسلة UTF-16
  • أخبر عدد الأحرف (وليس فقط وحدات التعليمات البرمجية 16 بت) التي تحتوي عليها سلسلة UTF-16

لذلك نظرت إلى وثائق وحدة العناية المركزة ووجدت UnicodeString و CharacterIterator الطبقات. لكن، UnicodeString ليس لديه fromUTF16 الطريقة ، فقط fromUTF8 و fromUTF32.

الشيء الآخر الذي لست متأكدًا منه هو ، هل UnicodeString منشط نسخ البيانات التي أعطيها أم لا؟ هوية شخصية تفضل كثيرا لاستخدام نهج الطبعة الصفرية حيث سأعمل فقط مع كائن غير قابل للتغيير ، بحيث لا يجب أن يؤدي أي عمليات نسخ ، فقط استخدم المخزن المؤقت الذي أوجهه إليه.

أنا أيضًا غير متأكد مما إذا كان بإمكاني الاستخدام فقط UCharIterator (على افتراض أنه يمكنني التحويل بطريقة أو بأخرى UChar* من سلاسل UTF-16 الخاصة بي).

لذلك سؤالي هو: كيف يمكنني استخدام وحدة العناية المركزة للأغراض المذكورة أعلاه؟

شكرا سلفا لاجاباتك!

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

المحلول

UnicodeString يستخدم UTF-16 للتخزين افتراضيًا. لهذا السبب فقط fromUTF8 و fromUTF32: من UTF-16 لا يوجد تحويل.

يقوم بنسخ البيانات. إنها سلسلة مملوكة ، مثلها مثل std::string.

يمكنك استخدام UCharIterator إذا كنت لا تريد نسخ البيانات. UChar هي قيمة 16 بت. يمكنك إجباره على أن يكون أي نوع 16 بت تفضل العمل معه من خلال تحديد UCHAR_TYPE دقيق:

حدد uchar لتكون uchar_type ، إذا كان ذلك محددًا (على سبيل المثال ، إلى char16_t) ، أو wchar_t إذا كان هذا بمبلغ 16 بت ؛ يفترض دائمًا أنه غير موقّع.

إذا لم يكن متاحًا ، فحدد uchar لتكون uint16_t.

هذا يجعل تعريف المعتمد على نظام URACH ولكنه يسمح بتوافق نوع السلسلة المباشر مع منصات مع أنواع WCHAR_T 16 بت.

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