Avatar ·

Как в Rust получить количество символов в строке, а не байтов?

مرحبًا أيها الزملاء! لقد بدأت للتو في تعلم Rust واجهت مشكلة غير متوقعة. أحتاج إلى معرفة طول السلسلة النصية بعدد الأحرف (char)، وليس بالبايت. في لغات أخرى، مثل Python أو Java، عادةً ما يُرجع الأسلوب len() عدد الأحرف. لكن في Rust الأمر مختلف. إليك مثال حيرني: ```rust fn main() { let text = String::from("Привет, мир!"); println!("Длина строки: {}", text.len()); } ``` كنت أتوقع رؤية 12 (عدد الأحرف في السلسلة "Привет, мир!")، لكني حصلت على 20. ثم أدركت أن الأسلوب .len() يحسب البايتات. في UTF-8، تشغل الأحرف السيريلية 2 بايت، لذا النتيجة مختلفة. لكني أحتاج تحديدًا عدد الأحرف — لواجهة المستخدم، أو التحقق من طول الإدخال، أو عد الكلمات. هل هناك أسلوب في Rust يُرجع عدد الأحرف بدلاً من البايتات؟ أم يجب كتابة تطبيقي الخاص؟ سأكون ممتنًا لأمثلة الكود. هام: قد تحتوي السلسلة على ليس فقط ASCII، بل أيضًا إيموجي، وسيريلية.