當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Rust OsStr.to_string_lossy用法及代碼示例


本文簡要介紹rust語言中 std::ffi::OsStr.to_string_lossy 的用法。

用法

pub fn to_string_lossy(&self) -> Cow<'_, str>

OsStr 轉換為 Cow<str>

任何非 Unicode 序列都將替換為 U+FFFD REPLACEMENT CHARACTER

例子

使用無效的 unicode 在 OsStr 上調用 to_string_lossy

// Note, due to differences in how Unix and Windows represent strings,
// we are forced to complicate this example, setting up example `OsStr`s
// with different source data and via different platform extensions.
// Understand that in reality you could end up with such example invalid
// sequences simply through collecting user command line arguments, for
// example.

#[cfg(unix)] {
    use std::ffi::OsStr;
    use std::os::unix::ffi::OsStrExt;

    // Here, the values 0x66 and 0x6f correspond to 'f' and 'o'
    // respectively. The value 0x80 is a lone continuation byte, invalid
    // in a UTF-8 sequence.
    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::*;

    // Here the values 0x0066 and 0x006f correspond to 'f' and 'o'
    // respectively. The value 0xD800 is a lone surrogate half, invalid
    // in a UTF-16 sequence.
    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");
}

相關用法


注:本文由純淨天空篩選整理自rust-lang.org大神的英文原創作品 std::ffi::OsStr.to_string_lossy。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。