【问题标题】:Iterate over OsString characters遍历 OsString 字符
【发布时间】:2020-03-28 17:32:15
【问题描述】:

使用String,我们有.chars() 方法来检索对该变量字符的迭代器。

我怎样才能用OsString 做同样的事情?例如

use std::vec::Vec;
use std::ffi::OsString;

pub fn ostring_to_chars(string: OsString) {
    string.chars().collect::<Vec<OsString>>();
}

【问题讨论】:

  • 字符,你的意思是字节吗?对于字符,你需要知道编码是什么。
  • 不,字符。基本上,我正在处理的文件是一个伪二进制文件,其中包含许多以字符形式存储的整数。其中一些高于 255 值,这意味着它们存储在一个以上的字节中,而其余的只有 1 个字节的长度。我不想弄清楚哪个字节属于哪个整数,如果我使用&amp;[u8] 而不是OsString,我必须这样做。
  • Ry:刚才看到你编辑了评论。您认为将其作为字节数组处理会更好吗?因为这个文件主要是 UTF-8 除了对于可能是也可能不是有效的 Unicode 的各种元数据。
  • 是的,听起来确实更好。
  • 好的,也许我会尝试使用固定数据类型 (u16) 而不是两个(u8 和 u16),因此每个整数将存储在两个字节中。

标签: string rust iterator


【解决方案1】:

试试这个:

pub fn ostring_to_chars(string: OsString) {
    let data = string.into_string().unwrap();
    for char in data.chars() {
        println!("{}", char);
    }
}

【讨论】:

  • 这可能不适用于 OP 的用例,因为“我正在处理的字符串来自一个文件,该文件可能包含也可能不包含有效的 UTF-8。”无效的 UTF-8 会导致 string.into_string().unwrap() 恐慌。
猜你喜欢
  • 2018-05-15
  • 2012-07-12
  • 2023-02-21
  • 1970-01-01
  • 2011-08-27
  • 1970-01-01
相关资源
最近更新 更多