0Pricing
Learn Rust Coding · درس

UTF-8 والمحارف

التعامل مع Unicode

UTF-8 والمحارف درس مجاني في Learn Rust Coding على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Learn Rust Coding، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Learn Rust Coding 4 دروس في المجموع.

سلاسل Rust النصية بترميز UTF-8

تُرمَّز كل قيمة String و&str في Rust باستخدام UTF-8. وهذا يعني أن النص يمكن أن يتضمن أي محرف Unicode، وليس ASCII فقط.

fn main() {
    let s = String::from("caf\u{e9}");
    println!("{}", s);
}

ما هو UTF-8؟

يرمّز UTF-8 كل محرف Unicode باستخدام بايت واحد إلى أربعة بايتات. وتستخدم محارف ASCII بايتًا واحدًا، بينما تحتاج الأحرف ذات العلامات الصوتية والرموز التعبيرية إلى بايتات أكثر.

fn main() {
    let ascii = "A";          // 1 byte
    let accent = "\u{e9}";    // 2 bytes (e-acute)
    println!("{} bytes vs {} bytes", ascii.len(), accent.len());
}

البايتات مقابل الأحرف

بسبب الترميز متعدد البايتات، تعيد len() عدد البايتات، بينما قد يكون عدد الأحرف أقل.

fn main() {
    let s = "caf\u{e9}";
    println!("bytes {}", s.len());
    println!("chars {}", s.chars().count());
}

النوع char هو Unicode

قيمة char في Rust هي قيمة بحجم 4 بايتات، ويمكنها تخزين أي قيمة عددية لمحرف Unicode، وليس مجرد بايت واحد.

fn main() {
    let letter = 'Z';
    let accented = '\u{f1}'; // n with tilde
    println!("{} {}", letter, accented);
}

تكرار الأحرف

استخدم chars() للتنقل في النص حرفًا حرفًا. إذ تتعامل هذه الطريقة بشكل صحيح مع الأحرف متعددة البايتات.

fn main() {
    let s = "a\u{e9}z";
    for c in s.chars() {
        println!("{}", c);
    }
}

لماذا لا يمكنك الفهرسة باستخدام رقم

لا تسمح Rust باستخدام s[0] مع سلسلة نصية. وبما أن حجم الأحرف يختلف بالبايتات، فستكون الفهرسة باستخدام رقم واحد غامضة وغير آمنة.

fn main() {
    let s = "hello";
    // let c = s[0]; // error: cannot index a str
    let first = s.chars().next().unwrap();
    println!("{}", first);
}

الحصول على الحرف nth

استخدم دالة المكرّر nth لجلب حرف حسب موضعه. وتعيد قيمة من النوع Option.

fn main() {
    let s = "abcdef";
    let third = s.chars().nth(2);
    println!("{:?}", third);
}

تكرار البايتات

عندما تحتاج فعلًا إلى البايتات الخام، استخدم bytes()، التي تنتج قيمًا من النوع u8.

fn main() {
    let s = "AB";
    for b in s.bytes() {
        println!("{}", b);
    }
}

التقطيع عند حدود البايتات

تستخدم شرائح السلاسل النصية فهارس البايتات. ويجب أن يقع التقطيع عند حد صالح لمحرف، وإلا يتسبب البرنامج في حدوث panic.

fn main() {
    let s = "hello";
    let part = &s[0..3]; // valid ASCII boundary
    println!("{}", part);
}

دوال char

يحتوي النوع char على دوال مفيدة مثل is_alphabetic وis_numeric وto_uppercase.

fn main() {
    let c = 'k';
    println!("alpha {} numeric {}", c.is_alphabetic(), c.is_numeric());
    println!("upper {}", c.to_uppercase());
}

عدّ أحرف محددة

اجمع بين chars وfilter لعدّ الأحرف المطابقة لشرط معيّن.

fn main() {
    let s = "banana";
    let a_count = s.chars().filter(|&c| c == 'a').count();
    println!("a appears {} times", a_count);
}

تحقق سريع

تذكّر سبب كون طول السلسلة النصية مفاجئًا أحيانًا.

مراجعة

UTF-8 وchars في Rust:

  • السلاسل النصية بترميز UTF-8؛ وتستخدم الأحرف من 1 إلى 4 بايتات.
  • تعيد len() عدد البايتات؛ بينما يعيد chars().count() عدد الأحرف.
  • لا يمكنك فهرسة السلسلة النصية باستخدام رقم؛ استخدم chars() أو nth.
  • يجب أن تقع الشرائح عند حدود الأحرف.
fn main() {
    let s = "sm\u{ee}le";
    println!("bytes {} chars {}", s.len(), s.chars().count());
    for c in s.chars() {
        print!("{} ", c);
    }
    println!();
}

الأسئلة الشائعة

هل درس «UTF-8 والمحارف» مجاني؟

نعم — نص درس «UTF-8 والمحارف» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Learn Rust Coding، انتقل إلى CoddyKit PRO. تتضمن دورة Learn Rust Coding 4 دروس في المجموع.

ماذا ستتعلم في «UTF-8 والمحارف»؟

التعامل مع Unicode تتمرن على Learn Rust Coding مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Learn Rust Coding؟

لا تُشترط خبرة سابقة. Learn Rust Coding على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.

كم من الوقت يستغرق درس «UTF-8 والمحارف»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Learn Rust Coding هذا؟

نعم. كل درس في Learn Rust Coding يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. String مقابل &str
  2. المقاطع
  3. أساليب String
  4. UTF-8 والمحارف
← العودة إلى Learn Rust Coding