gpt4 book ai didi

string - 如何在 Windows 上将 OsStr 转换为 &[u8]/Vec

转载 作者:行者123 更新时间:2023-11-29 07:44:44 26 4
gpt4 key购买 nike

我正在尝试将原始操作系统文件名保存到存储中,因此我需要获取 OsStr 的原始字节。

似乎可以调用as_bytes()在 *nix 平台上,但未在 MS Windows 上定义。

是否有一种可移植的方法将OsStr 转换为字节?

最佳答案

OsStr是它的表示是特定于操作系统的。由于技术原因,实现有些复杂(@Shepmaster's answer 提供了更多细节),但您可以这样想:

  • 在 POSIX 系统上,OsStr归结为 &[u8] , 因为 POSIX 函数接受并返回字节串;
  • 在 Windows 上,OsStr可以被认为是一个 &[u16] ,因为 Win32 Unicode 函数接受并返回字符串作为 16 位单元的数组。

由于 native Windows API 接受 16 位“宽字符”1 序列,这就是 OsStr旨在存储。虽然 OsStr 可以转换为字节,因为任何东西都可以转换为字节,这样的表示是没有用的,因为这些字节对用户和系统都没有意义。这就是为什么 OsStr不提供在 Windows 上以字节形式检索内容的方法。但是,它确实提供了 OsStr::encode_wide()遍历底层 u16在 Win32 中有用的值。在另一个方向,OsString::from_wide()可用于创建 OsString来自 u16 的一片值(value)观。

由您决定您的持久层将如何处理平台之间的这种差异。 Rust 是什么 OsStr提供了实现往返所需的工具,但代码在平台之间必然会有所不同。例如,serde 通过 effectively treating 解决差异作为enum OsString { Unix(Vec<u8>), Windows(Vec<u16>) } .


1 Windows 范围的字符串有时被描述为 UTF-16,因为这是它们在更高级别上的解释方式,但这对 所有 操作系统字符串都是不正确的。 Windows 文件名可以包含成对的 u16 不是有效的 UTF-16 值,但仍然可用。这就是为什么不能将 Windows 字符串表示为字节的原因,例如将它们转换为 UTF-8。

关于string - 如何在 Windows 上将 OsStr 转换为 &[u8]/Vec<u8> ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43083544/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com