【问题标题】:.NET BinaryReader not obeying encoding.NET BinaryReader 不服从编码
【发布时间】:2012-10-16 04:47:19
【问题描述】:

使用 System.IO.BinaryReader 读取二进制文件时,使用任何多字节读取方法时,字节顺序似乎不受影响。

BinaryReader br = new BinaryReader(fs, System.Text.Encoding.BigEndianUnicode);

BinaryReader br = new BinaryReader(fs, System.Text.Encoding.Unicode);

对我产生了相同的结果。

这让我很沮丧,因为我在读取数据结构时必须不断地颠倒字节顺序。

Screenshot - Big Endian Unicode

Screenshot - Little Endian Unicode

我已经在 .NET 3 到 4.5 上对此进行了测试

【问题讨论】:

  • 我假设 BinaryRead 仅适用于文本文件,但从代码中的块来看,文件似乎是二进制文件。然后据我所知,您必须使用 Convert 类对其进行手动编码
  • 如果你也为阅读器指定编码,结果是什么?

标签: c# .net unicode binary endianness


【解决方案1】:

BinaryReader 仅在处理string 数据时使用Encoding(几乎就是ReadString())。 ReadBytes 等不涉及 Encoding - 它只是读取二进制数据。由于您只调用 ReadBytes,因此 (Encoding) 永远不会被查看。

如果数据无序,则听起来文件不是使用BinaryWriter 创建的。如果它不是用BinaryWriter 创建的,那么BinaryReader 可能不是那么有用——你可以只用Stream

【讨论】:

  • 如果您知道格式,类似 BinaryReader 的类仍然很有用 - 但如果您需要切换字节顺序,EndianBinaryReader 就是您想要的,来自 MiscUtil :)
猜你喜欢
  • 1970-01-01
  • 2010-11-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-14
  • 2018-01-13
相关资源
最近更新 更多