字符串总是 Little Endian Unicode 吗?

Are strings ALWAYS Little Endian Unicode?

我知道字符串是以 Unicode 格式存储的。我还听说字符串总是 Little Endian Unicode,即使系统是 Big Endian。我的问题是:

如果系统也是 Big Endian,字符串是否以 Big Endian Unicode 表示?

顺便说一下,我在写入需要 Little Endian Unicode 的文件时使用它来提高性能。

The CLI specification 说:

I II.1.1.3 Character data type

A CLI char type occupies 2 bytes in memory and represents a Unicode code unit using UTF-16 encoding.

不要求它在特定的 byte-order 中。并且有充分的理由期望字节顺序与当前体系结构的其他数字类型的字节顺序相匹配。 IE。在 big-endian 机器上,人们会期望 char 类型存储为 big-endian 16 位值。

虽然它不是权威文档,但我会注意到一些回答或评论过 How do I get a consistent byte representation of strings in C# without manually specifying an encoding? 的人都认同这一信念,即 char 类型的字节顺序取决于平台架构.在该问题的评论和答案中有几个陈述声称 char 在 big-endian 系统上是 big-endian。

在我看来,如果您的体系结构的字节顺序很重要,您将可以访问 big-endian 体系结构的 CLI 实现,并且能够轻松地自行验证用于char 类型。你做过这样的验证吗?

综上所述,您很可能不需要知道 char 类型的字节顺序。 .NET 为各种编码提供字符编码器,包括 UTF16-LE 和 UTF16-BE。当使用 char 类型本身时,字节顺序无关紧要,在字节顺序很重要的情况下,您可以通过使用适当的 Encoding 类型来强制执行特定的顺序。如果您认为自己的情况属于这些一般准则的例外情况,最好 post 提出一个问题,准确描述该情况是什么以及为什么您认为它属于一般准则的例外情况。