加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

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

发布时间:2020-12-14 04:22:05 所属栏目:Windows 来源:网络整理
导读:我正在尝试将原始操作系统文件名持久存储,因此我需要获取OsStr的原始字节. 似乎可以在* nix平台上调用 as_bytes() ,但这不是在MS Windows上定义的. 有没有可移植的方法将OsStr转换为字节? OsStr的观点是它的表现形式是特定于操作系统的.由于技术原因( @Shep
我正在尝试将原始操作系统文件名持久存储,因此我需要获取OsStr的原始字节.

似乎可以在* nix平台上调用as_bytes(),但这不是在MS Windows上定义的.

有没有可移植的方法将OsStr转换为字节?

OsStr的观点是它的表现形式是特定于操作系统的.由于技术原因( @Shepmaster’s answer提供了更多详细信息),实现有些复杂,但您可以这样想:

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

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

您可以决定持久层如何处理平台之间的这种差异. Rust的OsStr提供了实现往返的必要工具,但代码之间的代码必然不同.例如,serde将差异解析为effectively treating,作为枚举OsString {Unix(Vec< u8>),Windows(Vec< u16>)}.

1 Windows宽字符串有时被描述为UTF-16,因为它是在更高级别解释它们的方式,但这对于所有OS字符串都不正确. Windows文件名可以包含无效UTF-16的u16值对,并且仍然可用.这就是为什么不可能通过例如将Windows字符串表示为字节的原因.将它们转换为UTF-8.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读