You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PDF417编码设置Compaction.TEXT触发ArrayIndexOutOfBoundsException问题咨询

问题原因分析

这个异常不是你的代码使用方式有误,而是因为你在TEXT压缩模式下传入了超出该模式支持范围的字符,触发了ZXing库的数组越界问题。

具体原因

ZXing的PDF417 TEXT压缩模式是专门为**ASCII字符(0-127)**设计的,它内部会用一个长度为128的数组来做字符类型判断(就是报错里的isMixed方法)。而你的contents里包含了Unicode码点为8226的字符(对应•这个项目符号),这个字符的编码远大于127,当代码尝试用它作为索引访问那个长度128的数组时,就会抛出ArrayIndexOutOfBoundsException。

解决方案

你可以根据需求选择以下任意一种方案:

  • 方案1:清理内容中的非ASCII字符
    如果业务允许,检查并移除contents里所有超出ASCII范围的字符(比如特殊符号、非英文的Unicode字符等),只保留TEXT模式支持的字符,这样就能正常使用Compaction.TEXT模式。
  • 方案2:切换到BINARY压缩模式
    如果你需要保留非ASCII字符(比如UTF-8编码的多语言字符、特殊符号),把压缩模式改成Compaction.BINARY。BINARY模式支持所有UTF-8字符,不会有字符范围限制:
    hints[EncodeHintType.PDF417_COMPACTION] = Compaction.BINARY
    
  • 方案3:让ZXing自动选择压缩模式
    可以完全不设置PDF417_COMPACTION这个hint,ZXing会自动根据你传入的内容判断最合适的压缩模式(TEXT/BINARY/NUMERIC),这样既省心又能避免手动选模式的错误。

补充说明

你代码里设置的CHARACTER_SET = "UTF-8"本身没问题,但TEXT压缩模式不兼容UTF-8的扩展字符,这两者的组合就导致了这个异常。切换到BINARY模式后,UTF-8的设置就能正常工作了。

内容的提问来源于stack exchange,提问作者Anvar Quvandiqov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 10:52:35