Unicode 与 UTF-8

Unicode vs. UTF-8

我相信 Windows 目前“Unicode”默认为 UTF-16,但将来可能不会这样。

出于这个原因,使用

会不会更好
[System.Text.Encoding]::UTF8.GetString($someByteArray)

而不是以下?:

[System.Text.Encoding]::Unicode.GetString($someByteArray)

首先,是的Windows defaults to UTF-16。我个人会使用 UTF-8,因为我编写的大多数应用程序都必须与 Linux 应用程序或某种形式的 http 进行通信,因此 UTF-8 更有可能。

此外,即使您的所有代码都用于 Microsoft 系统,也很容易转换为 UTF-8,如果 .NET 开始需要它,一个简单的替代正则表达式可以将所有内容转换为 Unicode (UTF-16)。

this may not be the case in the future.

Unicode 不是潜在可变编码;这只是微软对 UTF-16LE 的(令人遗憾的误导)名称。

它不会改变。即使 Microsoft 转向以 UTF-8 或 UTF-32 本地实现 Windows API(没有任何迹象表明会发生这种情况),System.Text.Encoding.Unicode 也必须保留 UTF-16LE,因为它是这样定义的根据 .NET 规范。

would it be better to use UTF8 instead of Unicode?

如果字节数组包含 UTF-8 编码的字节,则使用 UTF8,如果它们是 UTF-16LE,则使用 Unicode

如果您可以选择用于存储静态数据的编码,出于 space 效率原因,UTF-8 通常是更好的选择。