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
相关产品推荐
相关产品推荐

