0Pricing
Learn Rust Coding · บทเรียน

UTF-8 และอักขระ

การจัดการ Unicode

UTF-8 และอักขระ เป็นบทเรียน Learn Rust Coding ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 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 scalar ใด ๆ ได้ ซึ่งมากกว่าการเก็บไบต์เดียวอย่างมาก

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);
    }
}

การสไลซ์ตามขอบเขตไบต์

สไลซ์สตริงใช้ดัชนีไบต์ การสไลซ์ต้องลงท้ายที่ขอบเขตอักขระที่ถูกต้อง มิฉะนั้นโปรแกรมจะตื่นตระหนก

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 และอักขระ” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Learn Rust Coding ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Learn Rust Coding มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “UTF-8 และอักขระ”

การจัดการ Unicode คุณปฏิบัติ Learn Rust Coding ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Learn Rust Coding หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Learn Rust Coding บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน

บทเรียน “UTF-8 และอักขระ” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Learn Rust Coding นี้ได้ไหม

ได้ บทเรียน Learn Rust Coding ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. String เทียบกับ &str
  2. สไลซ์
  3. เมธอดของสตริง
  4. UTF-8 และอักขระ
← กลับไปที่ Learn Rust Coding