• 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源码!

    附件:点击下载

  • 相关阅读:
    基于jquery的弹幕实现
    Cookie在顶级域名、二级域名和三级域名之间共享的情况
    报错:Win10 这台计算机中已经安装了 .NET Framework 4.5.2/4.6.1/4.7.1等等任何版本 或版本更高的更新
    Unity中的Text内容有空格导致换行
    逆波兰表达式
    Java基础03 byte[] 与 16进制字符串之间的转换
    nacos Linux 单机模式配置
    Oracle 常用SQL
    软件安装01 Linux下redis安装
    Java基础04 JSONObject 与范型对象转换
  • 原文地址:https://www.cnblogs.com/vice/p/7154809.html
Copyright © 2020-2023  润新知