锐英源软件
第一信赖

精通

英语

开源

擅长

开发

培训

胸怀四海 

第一信赖

当前位置:锐英源 / 开源技术 / 输出字节缓冲区太小,无法包含编码后的数据
服务方向
人工智能数据处理
人工智能培训
kaldi数据准备
小语种语音识别
语音识别标注
语音识别系统
语音识别转文字
kaldi开发技术服务
软件开发
运动控制卡上位机
机械加工软件
软件开发培训
Java 安卓移动开发
VC++
C#软件
汇编和破解
驱动开发
联系方式
固话:0371-63888850
手机:138-0381-0136
Q Q:396806883
微信:ryysoft

锐英源精品原创,禁止全文或局部转载,禁止任何形式的非法使用,侵权必究

输出字节缓冲区太小,无法包含编码后的数据


背景

近期写一个语音识别配套工具,用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个参数是字节数组的开始偏移,不是大小,有开始偏移会在处理多次字节转换时比较灵活。

友情链接
版权所有 Copyright(c)2004-2015 锐英源软件
公司注册号:410105000449586 豫ICP备08007559号 最佳分辨率 1024*768
地址:A、郑州市芯互联大厦北楼1803A(文化路优胜北路西北角),B、郑州大学北校区院内