我必须将PathBuf
变量转换为a String
来提供我的函数.我的代码是这样的:
let cwd = env::current_dir().unwrap();
let my_str: String = cwd.as_os_str().to_str().unwrap().to_string();
println!("{:?}", my_str);
Run Code Online (Sandbox Code Playgroud)
它有效,但很糟糕cwd.as_os_str…
.您是否有更方便的方法或任何有关如何处理它的建议?
mca*_*ton 15
故意不容易:String
是UTF-8编码,但PathBuf
可能不是(例如在Windows上).因此转换可能会失败.
也有to_str
和to_string_lossy
用于方便的方法.前者返回一个Option<&str>
指示可能的失败,后者将始终成功,但将替换非UTF-8字符U+FFFD REPLACEMENT CHARACTER
(这就是它返回的原因Cow<str>
:如果路径已经是有效的UTF-8,它将返回对内部缓冲区的引用但如果要替换某些字符,它将String
为此分配一个新字符;在这两种情况下,into_owned
如果您确实需要a String
),则可以使用.
Par*_*rai 13
将 PathBuf 转换为 String 的一种方法是:
your_path.as_path().display().to_string();
Mic*_*ico 11
正如mcarton所说的那样并非如此简单,并非所有路径都是UTF-8编码的.但你可以使用:
p.into_os_string().into_string()
Run Code Online (Sandbox Code Playgroud)
要对它进行精细控制.通过?
您可以发送错误上一级或简单地忽略它的unwrap()
:
let my_str = cwd.into_os_string().into_string().unwrap();
Run Code Online (Sandbox Code Playgroud)
美丽的事情into_string()
是错误包装原始OsString
值.
正如@mcarton提到的, to_string_lossy() 应该可以完成这项工作。
let cwd = env::current_dir().unwrap();
let path: String =String::from(cwd.to_string_lossy());
rustc 1.56.1 (59eed8a2a 2021-11-01)
Run Code Online (Sandbox Code Playgroud)
我是一个(学习)Rust 粉丝(多年的 c/c++ 程序员)但是伙计,如果它让简单的事情变得如此复杂,UTF-8 和 COW .. 会让人们在翻译中迷失。
归档时间: |
|
查看次数: |
9313 次 |
最近记录: |