Windows   发布时间:2022-05-07  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了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.

大佬总结

以上是大佬教程为你收集整理的string – 如何在Windows上将OsStr转换为&[u8] / Vec?全部内容,希望文章能够帮你解决string – 如何在Windows上将OsStr转换为&[u8] / Vec?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: