MST

星途 面试题库

面试题:Rust中字符串与字符类型相互转换及编码处理

假设你有一个包含非ASCII字符的字符串 `String`,首先将其转换为字符数组 `Vec<char>`,然后再将字符数组转换回字符串,并且确保在转换过程中字符的编码(如UTF - 8)不出现错误,解释涉及到的编码相关概念,并编写完整代码实现。
15.7万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

一键面试

编码相关概念

  1. ASCII:美国信息交换标准代码,使用7位二进制数表示128个字符,主要用于表示英文字母、数字和一些基本符号。但它无法表示世界上众多语言中的非英文字符。
  2. UTF - 8:一种针对Unicode的可变长度字符编码,是一种使用1 - 4个字节来表示一个字符的编码方式。它可以表示Unicode标准中的任何字符,并且与ASCII兼容(ASCII字符在UTF - 8中用1个字节表示,和ASCII编码一样)。在Rust中,字符串(String)内部默认是以UTF - 8编码存储的。

代码实现(Rust语言)

fn main() {
    let non_ascii_string = "你好,世界!";
    // 将字符串转换为字符数组
    let char_vec: Vec<char> = non_ascii_string.chars().collect();
    // 将字符数组转换回字符串
    let back_to_string: String = char_vec.iter().collect();
    println!("原始字符串: {}", non_ascii_string);
    println!("转换回的字符串: {}", back_to_string);
}

代码解释

  1. non_ascii_string.chars().collect()chars() 方法将 String 拆分成一个个字符的迭代器,collect() 方法将这个迭代器收集成 Vec<char>
  2. char_vec.iter().collect():通过迭代 Vec<char>,再使用 collect() 方法将其转换回 String。由于Rust的 String 内部是UTF - 8编码,并且 char 类型本身就支持Unicode字符,所以整个转换过程不会出现编码错误。