use std::ffi::OsString;
use std::os::windows::ffi::OsStringExt;
let testStr = String::from("test").as_str().as_bytes().to_vec();
let retStringExt = OsString::from_vec(testStr);
got error:
error[E0599]: no function or associated item named from_vec found for type std::ffi::OsString in the current scope
373 | let retStringExt = OsString::from_vec(testStr);
| ^^^^^^^^ function or associated item not found in std::ffi::OsString
Unfortunately there's no cross-platform way to turn a bunch of bytes (Vec<u8>) into an OsString because not all operating systems represent strings using a bunch of bytes.
Operating systems descended from Unix do use an opaque sequence of bytes (Vec<u8>) to represent strings, so the from_vec() method from std::os::unix::ffi::OsStringExt can be used to convert between Vec<u8> and OsString.
Also keep in mind that you need to import these traits (i.e. use std::os::windows::ffi::OsStringExt) to get access to their functionality.
Windows uses ill-formed utf16 as string, and the rust Command's output is Vec<u8> (byte stream), i think but i am not sure that it is utf16 encoded string, so, i want to convert it to OSstring. If i use String::from_utf8 to convert the returned byte stream (Vec<u8>) to UTF8 string, it is wrong.
And windows uses function 'MultiByteToWideChar' to convert byte stream to UTF16, but in rust i could not find any function to do it.