精通
英语
和
开源
,
擅长
开发
与
培训
,
胸怀四海
第一信赖
锐英源精品原创,禁止全文或局部转载,禁止任何形式的非法使用,侵权必究
近期写一个语音识别配套工具,用C#处理文本文件,遇到如下异常:
输出字节缓冲区太小,无法包含编码后的数据,编码“Unicode (UTF-8)”的操作回退“System.Text.EncoderReplacementFallback”。
参数名: bytes
相关代码是:
char[] chars = snewrows.ToCharArray();
int ieec=ee.GetByteCount(chars, 0, chars.Length, true);
byte[] wbytes = new byte[ieec];
ee.GetBytes(chars, 0,chars.Length, wbytes, ieec, true);
这段代码是把文本转成utf8字节,用于保存文件,先是得到文本的字符数组,再用字符数组获取字节数组长度,再用GetBytes进行实际转换,执行时GetBytes行出错了,在VS里按F1,转到MSDN页面里看帮助内容,看到GetBytes处有所不一样,改成如下形式,解决问题:
ee.GetBytes(chars, 0,chars.Length, wbytes, 0, true);
第5个参数写成长度,不是0,导致错误。第5个参数是字节数组的开始偏移,不是大小,有开始偏移会在处理多次字节转换时比较灵活。