C# 中没有 UTF-32 big-endian?

Posted

技术标签:

【中文标题】C# 中没有 UTF-32 big-endian?【英文标题】:No UTF-32 big-endian in C#? 【发布时间】:2016-01-03 14:15:33 【问题描述】:

在 C# 中,Encoding.UTF32 是 UTF-32 小端,Encoding.BigEndianUnicode 是 UTF-16 大端,Encoding.Unicode 是 UTF-16 小端。但我找不到任何 UTF-32 big-endian。

我正在开发一个简单的文本查看器,不认为有很多以 UTF-32 大端编码的文档,但我也想为此做好准备,以防万一。

C# 不支持 UTF32 big-endian 吗?

顺便说一句,Java 支持它。

【问题讨论】:

msdn.microsoft.com/en-us/library/… 似乎表明字节顺序是构造函数的参数——这与您的想法不同吗? Encoding.GetEncoding("utf-32be") 是一种简单的获取方法。 感谢你们的信息丰富的回复! 【参考方案1】:

它在 UTF-32 上支持大端。只需使用overloaded constructor 自己创建编码:

Encoding e = new UTF32Encoding(true /*bigEndian*/, true /*byteOrderMark*/);

Encoding 上预定义为 static 的编码并不是一个详尽的列表。您可以创建更多其他编码。

【讨论】:

我发现一些资源说可以做到,但没有明确说明如何做到 - 干得好! 哇!你救了我!非常感谢!!【参考方案2】:
//https://docs.microsoft.com/en-us/dotnet/api/system.text.encoding?view=netframework-4.7.2
//12000 utf-32  Unicode (UTF-32)    ✓   ✓
//12001 utf-32BE    Unicode (UTF-32 Big endian)
const string strUniRepChr = "�"; //Unicode Character 'REPLACEMENT CHARACTER' (U+FFFD)
Encoding cpUTF32 = Encoding.GetEncoding(12000,
                   new EncoderReplacementFallback(strUniRepChr),
                   new DecoderReplacementFallback(strUniRepChr) );

【讨论】:

以上是关于C# 中没有 UTF-32 big-endian?的主要内容,如果未能解决你的问题,请参考以下文章

为啥没有 UTF-24? [复制]

如何在 C++ 中从字节数组(在 BIG-ENDIAN 中)中提取单个字段

如何从 Swift 中的 Big-endian 表示中计算 Int 值?

C# 对文本文件的读写

为什么 utf8没有字节序,utf16utf32有字节序?

BigInteger简析