【问题标题】:ZXing 2D barcode decoding: UTF-8 characters not decoded properlyZXing 2D 条码解码:UTF-8 字符未正确解码
【发布时间】:2015-05-18 10:29:06
【问题描述】:

我正在尝试使用 ZXing 来读取 2D 条码,它大部分都可以正常工作,只是它不能真正识别一些 UTF-8 字符,如 č 和 ć。我正在使用此代码来设置编码:

MultiFormatReader reader = new MultiFormatReader();
Hashtable hints = new Hashtable();
hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");  
reader.setHints(hints);
result = reader.decode(bitmap);

我做错了吗?

编辑:我也尝试调用带提示的解码重载,但结果是一样的。

【问题讨论】:

  • 您说的是哪种条码类型?并非所有二维码都支持 utf-8。解码结果也会有帮助。由于您生成条形码的方式可能存在错误,因此如果您显示一个示例条形码会有所帮助。
  • @tobitobs:PDF417。例如,结果给了我“Ä”而不是“Č”。这可能是有效的,因为我没有生成条形码 - 我正在尝试扫描官方标准化付款表格。
  • 没有条形码示例,这只是一个猜谜游戏,我猜它是一个 ISO-8859-1(5) 编码的条形码。
  • @tobitobs:尝试谷歌搜索“hub3a obrazac”,您应该会看到很多示例。文件说编码是 UTF-8,但我会试试你建议的,只是为了确定。

标签: java utf-8 barcode zxing


【解决方案1】:

看起来我以错误的方式创建位图。这有效:

MultiFormatReader reader = new MultiFormatReader();

FileInputStream fis = new FileInputStream(filePath);

BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(
    new BufferedImageLuminanceSource(
            ImageIO.read(fis))));

Result result = reader.decode(bitmap);

String originalText = result.getText();
byte[] bytes = originalText.getBytes("ISO-8859-1");
String outputText = new String(bytes, "UTF-8");

【讨论】:

  • 这有点作弊...我的意思是,您只是“过滤”掉编码无法理解的字符,迫使组件依赖回到您自己的代码中...AUCH .
猜你喜欢
  • 2017-06-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多