我知道字符串以Unicode格式存储。我还听说即使系统是Big Endian,字符串也始终是Little Endian Unicode。我的问题是这样的:
如果系统也是Big Endian,是否以Big Endian Unicode表示字符串?
顺便说一句,当写入需要使用Little Endian Unicode的文件时,我正在使用它来提高性能。
CLI规范说:
I II.1.1.3字符数据类型
CLI字符类型在内存中占用2个字节,并使用UTF-16编码表示Unicode代码单元。
不需要以特定的字节顺序。并且有充分的理由期望字节顺序将与当前体系结构的其他数字类型的字节顺序匹配。也就是说,在一台大端计算机上,人们会期望将char
类型存储为大端16位值。
尽管它不是权威性文档,但我会注意到,有几个人回答或评论了如何在不手动指定编码的情况下如何在C#中获得一致的字节字符串表示形式?分享这种信念,即char
类型的字节序取决于平台架构。在该问题的注释和答案中有几句话声称char
在big-endian系统上是big-endian。
在我看来,如果您的体系结构的字节序很重要,则可以访问big-endian体系结构的CLI实现,并且可以轻松地自己验证用于该char
类型的字节顺序。您是否已努力进行此类验证?
综上所述,您很有可能不需要知道char
类型的字节顺序。.NET提供了用于多种编码的字符编码器,包括UTF16-LE和UTF16-BE。使用char
类型本身时,字节顺序无关紧要,并且在字节顺序很重要的情况下,可以使用适当的Encoding
类型来强制执行特定的顺序。如果您认为自己所处的情况是这些一般准则的例外,那么最好发布一个描述确切情况是什么以及为什么您认为这是一般准则的例外的问题。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句