我一直在我的网站上使用.NET MessagingToolkit.QRCode库,以便在顶部生成带有自定义图像的QR码,直到现在我对此库没有任何问题。
最近,由于系统增长,我需要编码的数据变得越来越大,并且尝试在QR码内编码这些数据导致QRCodeEncoder类的Encode方法中的内部“索引超出范围”异常。
通过测试,我注意到此方法似乎接受的最大字符数为86,任何大于此值的字符都将引发异常。更改传入的字符串的编码类型无济于事。
我确实注意到我使用的库的版本已经过时,但是更新到最新版本也没有解决问题。
有没有其他人在使用该库时遇到过这个问题并找到了解决方案?或者,是否有另一个我可以使用的库没有这样的问题?
例外情况如下:
2012-10-01 17:39:52,098 Error: System.IndexOutOfRangeException: Index was outside the bounds of the array.
at MessagingToolkit.QRCode.Codec.QRCodeEncoder.divideDataBy8Bits(Int32[] data, SByte[] bits, Int32 maxDataCodewords)
at MessagingToolkit.QRCode.Codec.QRCodeEncoder.calQrcode(Byte[] qrcodeData)
at MessagingToolkit.QRCode.Codec.QRCodeEncoder.Encode(String content, Encoding encoding)
at MessagingToolkit.QRCode.Codec.QRCodeEncoder.Encode(String content)
答案 0 :(得分:2)
在该图书馆的官方页面上,您可以找到问题解决方案的简短说明:http://platform.twit88.com/news/60。我不知道这是否能解决你的问题。我会找到库的源代码并通过它调试以查看错误的原因。
hm ...无法在任何地方找到源代码。所以请与作者联系并询问他们。
如果不能解决问题,我会将库更改为其他内容。我已经成功使用了QrCode.Net和MVC,如果你愿意的话,还有一些示例代码如何将它集成到MVC中。
答案 1 :(得分:1)
我知道这篇文章有点陈旧但我遇到了同样的问题,发现我的字符串(“)中有一个非法字符,QR码无法识别。用常规引号替换它(")并且工作正常。
答案 2 :(得分:0)
我遇到了同样的问题。但是我发现每次调用Encode
方法时都会创建一个新的编码器实例来解决问题。
答案 3 :(得分:0)
我遇到了同样的问题
QRCodeEncoder qrCE = new QRCodeEncoder();
qrCE.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE;
qrCE.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.L;
qrCE.QRCodeVersion = 1;
picQRCode.Image = qrCE.Encode(memBarcodeDataForPrint.Text, System.Text.Encoding.UTF8);
我更改了以下行
qrCE.QRCodeVersion = 1;
像
qrCE.QRCodeVersion = 0;
它解决了。
答案 4 :(得分:-1)
同样的问题,但当将版本更改为0时,它正常工作。