The output char buffer is too small to contain the decoded characters, encoding 'Unicode (UTF-8)' fallback 'System.Text.DecoderReplacementFallback'.

Exception when executing

if (br.PeekChar() != -1)

br is a binary reader.

The data to peak is D000 (D0=208)

The cause is, for PeekChar, after peak, the value will be transformed to char.

But Unicode and normal char has different length.

If I use br.ReadByte(), there will be no problem.

But if it hit the end of one file, br.ReadByte() would threw an error.

I googled and found many similar errors.

The best article that solved my problem is

https://social.msdn.microsoft.com/Forums/vstudio/en-US/7bd62472-b4ff-47c7-9bbd-7af9512d0301/binaryreaderpeekchar-fails-when-checking-for-end-of-file?forum=clr

Use the following to identify a file end and don‘t use PeekChar().

if(reader.BaseStream.Position == reader.BaseStream.Length)

or exclaim the Encoding format. Then PeekChar will be OK to use.

BinaryReader binaryReader = new BinaryReader(memoryStream, Encoding.ASCII);

I used the second one. problem solved.

The output char buffer is too small to contain the decoded characters, encoding 'Unicode (UTF-8)' fallback 'System.Text.DecoderReplacementFallback'.

时间: 2024-11-29 14:52:05

The output char buffer is too small to contain the decoded characters, encoding 'Unicode (UTF-8)' fallback 'System.Text.DecoderReplacementFallback'.的相关文章

c#网络包的编解码

之前写过一篇关于c#udp分包发送的文章 这篇文章里面介绍的方法是一种实现,但是存在一个缺点就是一个对象序列化后会增大很多,不利于在网络中的传输. 我们在网络中的传输是需要尽可能的减小传送的数据包的大小,于是我参考了网上一些资料和一些开源的项目(http://www.fishlee.net/)这个上面的那个开源的飞鸽传输的框架, 其实也就是把要传送的数据按照某种规定放在一个byte数组中,然后接收到后按照相应的格式把数据解析出来,为了减小数据还使用了GZipStream的压缩,之前出的问题就是在

c#中关于udp实现可靠地传输(数据包的分组发送) 升级版

在c#中关于udp实现可靠地传输(数据包的分组发送)中我们讨论了,UDP包的发送,但是上一个程序有一个问题,就是数据比较大,一个Message类序列化后都有2048B,而实际的数据量也就不过 50B罢了,这就说明其中数据有效的很少,这样当传送的数据包过多后,效率会极大的降低.因此我们只有想办法减少冗余数据. 此项目中借用了飞鸽传书中的一个<FSLib.IPMessager>项目中的思想,并加以改善,感谢此项目作者,让我对此有了深刻的理解 我们需要自己定义数据的传输结构    我们可以定义一个数

c#基于事件模型的UDP通讯框架(适用于网络包编解码)

之前写过一篇关于c#udp分包发送的文章 这篇文章里面介绍的方法是一种实现,可是存在一个缺点就是一个对象序列化后会增大非常多.不利于在网络中的传输. 我们在网络中的传输是须要尽可能的减小传送的数据包的大小.于是我參考了网上一些资料和一些开源的项目(http://www.fishlee.net/)这个上面的那个开源的飞鸽传输的框架. 事实上也就是把要传送的数据依照某种规定放在一个byte数组中,然后接收到后依照对应的格式把数据解析出来,为了减小数据还使用了GZipStream的压缩,之前出的问题就

IOUtils总结

常用的静态变量 在IOUtils中还是有很多常用的一些变量的,比如换行符等等 public static final char DIR_SEPARATOR_UNIX = '/'; public static final char DIR_SEPARATOR_WINDOWS = '\\'; public static final char DIR_SEPARATOR; public static final String LINE_SEPARATOR_UNIX = "\n"; publi

Java程序员的日常—— IOUtils总结

以前写文件的复制很麻烦,需要各种输入流,然后读取line,输出到输出流...其实apache.commons.io里面提供了输入流输出流的常用工具方法,非常方便.下面就结合源码,看看IOUTils都有什么用处吧! 代码参考https://github.com/xinghalo/JDK-Learning 常用的静态变量 在IOUtils中还是有很多常用的一些变量的,比如换行符等等 public static final char DIR_SEPARATOR_UNIX = '/'; public s

文件输入输出流工具: IOUtils使用总结

文件输入输出流工具: IOUtils使用总结 以前写文件的复制很麻烦,需要各种输入流,然后读取line,输出到输出流...其实apache.commons.io里面提供了输入流输出流的常用工具方法,非常方便.下面就结合源码,看看IOUTils都有什么用处吧! 本文系转载,原作者:xingoo 出处:http://www.cnblogs.com/xing901022 常用的静态变量 在IOUtils中还是有很多常用的一些变量的,比如换行符等等 public static final char DI

FileDown.cs(20170223)

using System; using System.IO; using System.Threading; using System.Web; namespace System.CRM.Common { /// <summary> /// 文件下载类 /// </summary> public class FileDown { public FileDown() { } /// <summary> /// 参数为虚拟路径 /// </summary> pu

python学习之函数

1.函数名可以被赋值 比如: def aaa(): pass b = aaa//将函数名字赋值给b b()//跟aaa()效果一样 2.return 2.1.如果函数不写return的话,会默认返回None 2.2.return后,函数下面的语句不会被执行,中断函数操作 2.3.return个什么东西都行,哪怕是个列表..... 3.pycharm使用断点调试的话,需要用debug模式(向右小箭头的小虫子) 4.参数: 默认参数必须写在后边 def aaa(a1, a2 = 1): pass//

python3.4 build in functions from 官方文档 翻译中

2. Built-in Functions https://docs.python.org/3.4/library/functions.html?highlight=file The Python interpreter has a number of functions and types built into it that are always available. They are listed here in alphabetical order.     Built-in Funct