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源碼!

附件:點擊下載

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM