Нет 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) );