ThoughtWorks.QRCode 生成QR二维码时提示“索引超出了数组界限”的原因和解决方法
“索引超出了数组界限”也有可能确实是因为你选择的二维码Version对应的容量不足以存储你所放的内容,如果你确定使用的版本容量二维码能存储你的内容,但还是报错,那么再考虑此解决方法
这两天忙着做一个客户标签打印程序,因为二维码里面存在控制符,使用ZPL指令存在一些问题,因此决定使用生成二维码图片然后转换成ZPL格式图片来打印。途中找了很多类库,很多都无法自定义QR的version而放弃,转而找到ThoughtWorks.QRCode.dll,效果很满意,但是测试的时候发现经常会提示“索引超出了数组界限”异常,开始以为是内容太多的原因。测试多种version都不凑效,我使用的是version=10,而该版本最高可容纳213个字节,实际内容却只有100多个字节。然后网上各种找答案,要么说设置为0(0是QR自动大小)这样我使用该类库就没有意义了,而且使用此方法也测试过,依然报错。

然后我开始找ThoughtWorks.QRCode的源码,使用源码一行一行调试,结果发现使用源码自带的demo程序,设置与我程序一样的version,放一样的内容,竟然没有报错,此时我肯定了不是因为二维码容量导致的。
接着我开始两个程序同步调试,一行一行观察两个程序运行时源码QRCodeEncoder.cs中每个数值是否相同,最后在我的程序在源码第448行处发现报了异常,源码demo却没有。查看代码,此处在读某个文件,

然后发现在源码demo程序生成文件夹中有这么一个文件夹(下图),按448行的理解,此文件夹中应该存储的是QR对应的Version的数据文件,用于计算二维码容量,而我的程序没有此文件夹计算结果为0,后续计算自然会报“索引超出了数组界限”异常。
把此文件夹复制到程序中,问题解决,不再报此异常。最后附上Demo源码!

附件:点击下载
ThoughtWorks.QRCode 生成QR二维码时提示“索引超出了数组界限”的原因和解决方法的更多相关文章
- Google API快速生成QR二维码
Google API快速生成QR二维码 现在来说生成二维码最简单的方法是使用Google Chart API来实现,再次膜拜Google大神- Google Chart API是一套可以让你在线生成报 ...
- pbfunc外部函数扩展应用-直接在Datawindow中生成QR二维码,非图片方式
利用pbfunc外部函数在Datawindow中直接生成QR二维码,非图片方式.需要注意以下面几点: Datawindow的DataObject的单位必须为像素(Pixels). Datawindow ...
- C# vb .NET生成QR二维码
二维码比条形码具有更多优势,有些场合使用二维码比较多,比如支付.通过将某些数据生成二维码,就可以实现一码走天下.那么如何在C#,.Net平台代码里生成二维码呢?答案是使用SharpBarcode! S ...
- Pyqt+QRcode 生成 识别 二维码
1.生成二维码 python生成二维码是件很简单的事,使用第三方库Python QRCode就可生成二维码,我用Pyqt给QRcode打个壳 一.python-qrcode介绍 python-qrco ...
- 为jquery qrcode生成的二维码嵌入图片
在一次微信项目中,需要实现通过扫描二维码来进行会议签到,二维码的生成选择了qrcode.js的版本,然后使用jquery.qrcode.js插件来绘制二维码. <script type=&quo ...
- 微信支付-无法识别qrcode生成的二维码图片
1.开始使用 table方式,但是还是无法识别二维码 http://www.cnblogs.com/staticed/p/8549316.html var code_url = data.code_ ...
- jquery.qrcode二维码插件生成彩色二维码
jquery.qrcode.js 是居于jquery类库的绘制二维码的插件,用它来实现二维码图形渲染支持canvas和table两种绘图方式. (jquery.qrcode.js 设置显示方式为tab ...
- [AX2012 R3]在SSRS报表中使用QR二维码
AX2012是自带生成QR二维码的类,可以很方便的用在SSRS报表中,下面演示如何在RDP的报表中使用二维码,首先从定义临时表开始: 字段URL是要用于二维码的字符串,QrCode是container ...
- Android应用--QR的生成(二维码)
二维码的定义: 二维码(2-dimensional bar code),是用某种特定的几何图形按一定规律在平面(二维方向上)分布的黑白相间的图形记录数据符号信息的. 在许多种类的二维条码中,常用的码制 ...
随机推荐
- json_encode处理json数据中文乱码
今天使用json_encode 把一个数组转换成json数据,echo处理的时候,显示为null.去查了php手册. 该函数只能接受 UTF-8 编码的数据. 在网上搜了下,找到了解决方法. < ...
- 【mongodb系统学习之十】mongodb查询(一)
十.mongodb查询:find ;查询时条件中不能引用文档中其他键的值: 1).查询数据库全部数据:语法db.collectionName.find();默认只显示前20条,如图: 2).按条件查询 ...
- freemarker定义一个连续的序列
freemarker定义一个连续的序列 1.简易说明 定义一个连续的序列,并打印出序列中的元素 2.实现源码 <#--freemarker定义了一个连续的序列--> <#assign ...
- MySQLdump常用命令
MySQLdump常用mysqldump -u root -p --databases 数据库1 数据库2 > xxx.sql还原:系统命令行: MySQL -uroot -p123456 &l ...
- Python Web-第六周-JSON and the REST Architecture(Using Python to Access Web Data)
1.JavaScript Object Notation JSON 1.JSON 官方介绍 http://www.json.org/json-zh.html 2.json1.py import jso ...
- Unity3D基本操作教程
物体操作图文教程 一些游戏资产文件 拖进游戏里 像这样,就可以上坡了 修改箱子的位置 完成 机械臂开始运作 游戏通关,教学结束
- java线程安全问题以及使用synchronized解决线程安全问题的几种方式
一.线程安全问题 1.产生原因 我们使用java多线程的时候,最让我们头疼的莫过于多线程引起的线程安全问题,那么线程安全问题到底是如何产生的呢?究其本质,是因为多条线程操作同一数据的过程中,破坏了数据 ...
- 【LightOJ1282】Leading and Trailing(数论)
[LightOJ1282]Leading and Trailing(数论) 题面 Vjudge 给定两个数n,k 求n^k的前三位和最后三位 题解 这题..真的就是搞笑的 第二问,直接输出快速幂\(m ...
- Java集合中迭代器的常用用法
该例子展示了一个Java集合中迭代器的常用用法public class LinkedListTest { public static void main(String[] args) { List&l ...
- Liunx2:Liunx目录结构
Liunx目录图 进入根目录,使用ll命令看一下Liunx整个根目录图: 这里面所有的目录都是买完服务器之后最初始的目录,没有进过任何加工.Liunx以树的结构组织所有目录,用一张图表示一下Liunx ...