3 ms·
> in the operating system’s preferred representation This is unfortunately misleading and a common misconception about OsStr. The documentation now explains:
by puffoflogic 4y ago
> in the operating system’s preferred representation
This is unfortunately misleading and a common misconception about OsStr. The documentation now explains:
> OsStr losslessly represents a borrowed reference to a platform string. However, this representation is not necessarily in a form native to the platform
What this means is that valid sequences of Unicode scalars are encoded as utf8 in OsStr on both Windows and Linux. The difference between OsStr and str is that the former can round-trip with the native encoding; that means that for Windows, there's a special way it encodes unpaired surrogates (wtf8) and on Linux it's actually just an arbitrary byte sequence.
This choice of representation means that on every platform: you can always borrow an OsStr from a str (as_ref) and you can sometimes borrow a str from an OsStr (to_str). This cross-borrowing wouldn't be possible if OsStr were UCS-2 on Windows.