Нет UTF-32 с прямым порядком байтов в C#?

В C# Encoding.UTF32 является UTF-32 с прямым порядком байтов, Encoding.BigEndianUnicode является UTF-16 big-endian, Encoding.Unicode это UTF-16 с прямым порядком байтов. Но я не могу найти для UTF-32 big-endian.

Я разрабатываю простой просмотрщик текста и не думаю, что есть много документов, закодированных в UTF-32 с прямым порядком байтов, но я хочу подготовиться к этому тоже, на всякий случай.

Разве C# не поддерживает UTF32 с прямым порядком байтов?

Кстати, Java поддерживает это.

2 ответа

Решение

Он поддерживает big endian на UTF-32. Просто создайте кодировку самостоятельно, используя перегруженный конструктор:

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

Кодировки, определенные как static на Encoding не исчерпывающий список Вы можете создавать много и много других кодировок.

//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) );
Другие вопросы по тегам