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?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 C++ 中从字节数组(在 BIG-ENDIAN 中)中提取单个字段