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

前端之家收集整理的这篇文章主要介绍了string – 如何在Windows上将OsStr转换为&[u8] / Vec?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试将原始操作系统文件名持久存储,因此我需要获取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.

原文链接:https://www.f2er.com/windows/364389.html

猜你在找的Windows相关文章