Struct std::ffi::OsString 1.0.0[−][src]
pub struct OsString { /* fields omitted */ }
Expand description
一种类型,可以表示拥有的,可变的平台原生字符串,但可以廉价地与 Rust 字符串互转换。
对这种类型的需求源于以下事实:
-
在 Unix 系统上,字符串通常是非零字节的任意序列,在许多情况下解释为 UTF-8。
-
在 Windows 上,字符串通常是非零的 16 位值的任意序列,如果有效,则将其解释为 UTF-16。
-
在 Rust 中,字符串始终是有效的 UTF-8,其中可能包含零。
OsString
OsStr
和 OsStr
通过同时表示 Rust 和平台原生字符串值来弥合这种差距,并且特别是允许将 Rust 字符串尽可能地转换为 “OS” 字符串。
这样的结果是 OsString
实例不是 * NUL
终止的; 为了传递给例如 Unix 系统调用,您应该创建一个 CStr
。
OsString
对 &OsStr
就像对 String
对 &str
一样: 每对中的前者是拥有的字符串; 后者是借用的。
注意,OsString
和 OsStr
在内部不一定要以平台固有的形式保存字符串。在 Unix 上,字符串存储为 8 位值的序列,而在 Windows 上,字符串如刚刚讨论的那样是 16 位值,实际上,字符串也存储为 8 位值的序列,并以 UTF-8 的严格成员。
这对于理解处理容量和长度值时很有用。
创建一个 OsString
从 Rust 字符串: OsString
实现 From
<
String
>
,因此您可以使用 my_string.from
从普通的 Rust 字符串创建 OsString
。
从切片: 就像您可以先从一个空的 Rust String
开始,然后将 String::push_str
&str
子字符串切片放入其中一样,您可以使用 OsString::new
方法创建一个空的 OsString
,然后使用 OsString::push
方法将其插入到其中。
提取整个操作系统字符串中的借用引用
您可以使用 OsString::as_os_str
方法从 OsString
获取 &
OsStr
; 这实际上是对整个字符串的借用引用。
Conversions
请参见模块中关于 conversions 的顶级文档,以讨论为 OsString
from/to 原生表示形式的 conversions 而实现的特征。
Implementations
创建具有给定容量的新 OsString
。
该字符串将能够完全容纳其他 OS 字符串的 capacity
长度单位,而无需重新分配。
如果 capacity
为 0,则不会分配该字符串。
请参见有关编码的主要 OsString
文档信息。
Examples
use std::ffi::OsString; let mut os_string = OsString::with_capacity(10); let capacity = os_string.capacity(); // 无需重新分配即可完成此推送 os_string.push("foo"); assert_eq!(capacity, os_string.capacity());Run
🔬 This is a nightly-only experimental API. (shrink_to
#56431)
new API
🔬 This is a nightly-only experimental API. (shrink_to
#56431)
new API
pub fn into_boxed_os_str(self) -> Box<OsStr>ⓘNotable traits for Box<I, A>impl<I, A> Iterator for Box<I, A> where
I: Iterator + ?Sized,
A: Allocator, type Item = <I as Iterator>::Item;impl<F, A> Future for Box<F, A> where
F: Future + Unpin + ?Sized,
A: Allocator + 'static, type Output = <F as Future>::Output;impl<R: Read + ?Sized> Read for Box<R>impl<W: Write + ?Sized> Write for Box<W>
1.20.0[src]
pub fn into_boxed_os_str(self) -> Box<OsStr>ⓘNotable traits for Box<I, A>impl<I, A> Iterator for Box<I, A> where
I: Iterator + ?Sized,
A: Allocator, type Item = <I as Iterator>::Item;impl<F, A> Future for Box<F, A> where
F: Future + Unpin + ?Sized,
A: Allocator + 'static, type Output = <F as Future>::Output;impl<R: Read + ?Sized> Read for Box<R>impl<W: Write + ?Sized> Write for Box<W>
1.20.0[src]impl<I, A> Iterator for Box<I, A> where
I: Iterator + ?Sized,
A: Allocator, type Item = <I as Iterator>::Item;impl<F, A> Future for Box<F, A> where
F: Future + Unpin + ?Sized,
A: Allocator + 'static, type Output = <F as Future>::Output;impl<R: Read + ?Sized> Read for Box<R>impl<W: Write + ?Sized> Write for Box<W>
Methods from Deref<Target = OsStr>
任何非 Unicode 序列都将替换为 U+FFFD REPLACEMENT CHARACTER
。
Examples
使用无效的 Unicode 在 OsStr
上调用 to_string_lossy
:
// 注意,由于 Unix 和 Windows 表示字符串的方式不同,我们不得不使该示例复杂化,使用不同的源数据和通过不同的平台扩展来设置示例 `OsStr`。 // 可以理解,实际上,仅通过收集用户命令行参数,您就可以得到这样的示例无效序列。 #[cfg(unix)] { use std::ffi::OsStr; use std::os::unix::ffi::OsStrExt; // 此处,值 0x66 和 0x6f 分别对应于 'f' 和 'o'。 // 值 0x80 是一个单独的连续字节,在 UTF-8 序列中无效。 let source = [0x66, 0x6f, 0x80, 0x6f]; let os_str = OsStr::from_bytes(&source[..]); assert_eq!(os_str.to_string_lossy(), "fo�o"); } #[cfg(windows)] { use std::ffi::OsString; use std::os::windows::prelude::*; // 在此,值 0x0066 和 0x006f 分别对应于 'f' 和 'o'。 // 值 0xD800 是一个单独的替代一半,在 UTF-16 序列中无效。 let source = [0x0066, 0x006f, 0xD800, 0x006f]; let os_string = OsString::from_wide(&source[..]); let os_str = os_string.as_os_str(); assert_eq!(os_str.to_string_lossy(), "fo�o"); }Run
返回此 OsStr
的长度。
请注意,这不会以 OS 字符串形式返回字符串中的字节数。
返回的长度是 OsStr
使用的基础存储的长度。
如 OsString
简介中所讨论的,OsString
和 OsStr
以最适合于原生平台和 Rust 字符串形式之间的廉价相互转换的形式存储字符串,这两种形式在存储大小和编码方面可能都大不相同。
此数字对于传递给其他方法 (例如 OsString::with_capacity
) 以避免重新分配非常有用。
Examples
use std::ffi::OsStr; let os_str = OsStr::new(""); assert_eq!(os_str.len(), 0); let os_str = OsStr::new("foo"); assert_eq!(os_str.len(), 3);Run
将此字符串就地转换为其 ASCII 小写等效项。
ASCII 字母 ‘A’ 到 ‘Z’ 映射到 ‘a’ 到 ‘z’,但是非 ASCII 字母不变。
要返回新的小写值而不修改现有值,请使用 OsStr::to_ascii_lowercase
。
Examples
use std::ffi::OsString; let mut s = OsString::from("GRÜßE, JÜRGEN ❤"); s.make_ascii_lowercase(); assert_eq!("grÜße, jÜrgen ❤", s);Run
将此字符串就地转换为其 ASCII 大写等效项。
ASCII 字母 ‘a’ 到 ‘z’ 映射到 ‘A’ 到 ‘Z’,但是非 ASCII 字母不变。
要返回新的大写值而不修改现有值,请使用 OsStr::to_ascii_uppercase
。
Examples
use std::ffi::OsString; let mut s = OsString::from("Grüße, Jürgen ❤"); s.make_ascii_uppercase(); assert_eq!("GRüßE, JüRGEN ❤", s);Run
返回此字符串的副本,其中每个字符都映射为其等效的 ASCII 小写字母。
ASCII 字母 ‘A’ 到 ‘Z’ 映射到 ‘a’ 到 ‘z’,但是非 ASCII 字母不变。
要就地小写该值,请使用 OsStr::make_ascii_lowercase
。
Examples
use std::ffi::OsString; let s = OsString::from("Grüße, Jürgen ❤"); assert_eq!("grüße, jürgen ❤", s.to_ascii_lowercase());Run
返回此字符串的副本,其中每个字符都映射为其等效的 ASCII 大写字母。
ASCII 字母 ‘a’ 到 ‘z’ 映射到 ‘A’ 到 ‘Z’,但是非 ASCII 字母不变。
要就地将值大写,请使用 OsStr::make_ascii_uppercase
。
Examples
use std::ffi::OsString; let s = OsString::from("Grüße, Jürgen ❤"); assert_eq!("GRüßE, JüRGEN ❤", s.to_ascii_uppercase());Run
检查两个字符串是否为 ASCII 不区分大小写的匹配项。
与 to_ascii_lowercase(a) == to_ascii_lowercase(b)
相同,但不分配和复制临时文件。
Examples
use std::ffi::OsString; assert!(OsString::from("Ferris").eq_ignore_ascii_case("FERRIS")); assert!(OsString::from("Ferrös").eq_ignore_ascii_case("FERRöS")); assert!(!OsString::from("Ferrös").eq_ignore_ascii_case("FERRÖS"));Run
Trait Implementations
用一个元素扩展一个集合。
fn from(s: OsString) -> Box<OsStr>ⓘNotable traits for Box<I, A>impl<I, A> Iterator for Box<I, A> where
I: Iterator + ?Sized,
A: Allocator, type Item = <I as Iterator>::Item;impl<F, A> Future for Box<F, A> where
F: Future + Unpin + ?Sized,
A: Allocator + 'static, type Output = <F as Future>::Output;impl<R: Read + ?Sized> Read for Box<R>impl<W: Write + ?Sized> Write for Box<W>
[src]
fn from(s: OsString) -> Box<OsStr>ⓘNotable traits for Box<I, A>impl<I, A> Iterator for Box<I, A> where
I: Iterator + ?Sized,
A: Allocator, type Item = <I as Iterator>::Item;impl<F, A> Future for Box<F, A> where
F: Future + Unpin + ?Sized,
A: Allocator + 'static, type Output = <F as Future>::Output;impl<R: Read + ?Sized> Read for Box<R>impl<W: Write + ?Sized> Write for Box<W>
[src]impl<I, A> Iterator for Box<I, A> where
I: Iterator + ?Sized,
A: Allocator, type Item = <I as Iterator>::Item;impl<F, A> Future for Box<F, A> where
F: Future + Unpin + ?Sized,
A: Allocator + 'static, type Output = <F as Future>::Output;impl<R: Read + ?Sized> Read for Box<R>impl<W: Write + ?Sized> Write for Box<W>
从迭代器创建一个值。 Read more
从迭代器创建一个值。 Read more
如果存在,则此方法返回 self
和 other
值之间的顺序。 Read more