【问题标题】:Unknown encoding error when parsing DataMatrix with ISO-8859-1 encoding使用 ISO-8859-1 编码解析 DataMatrix 时出现未知编码错误
【发布时间】:2021-05-06 02:21:42
【问题描述】:

开发一个使用 Google 的 MLKit 扫描数据矩阵代码的 Android 应用程序,我无法使用以 ISO-8859-1 编码并包含非 ASCII 字符的数据解析代码。

这是一个例子: DataMatrix failing with ML Kit

val options = BarcodeScannerOptions.Builder()
    .setBarcodeFormats(Barcode.FORMAT_DATA_MATRIX)
    .build()
val scanner = BarcodeScanning.getClient(options)
scanner.process(image).addOnSuccessListener { barcodes ->
  val barcode = barcodes.firstOrNull()
  Log.i(TAG, barcode?.rawValue)
  Log.i(TAG, String(barcode?.rawBytes!!, StandardCharsets.ISO_8859_1))
}

两个日志语句都返回一个表示“未知编码”(字面意思)的字符串。

我正在使用最新版本的 MLKit 条码扫描库:

implementation 'com.google.mlkit:barcode-scanning:16.1.1

ZXing 可以胜任,但它在识别现实生活中遇到了更多困难,扫描并不那么完美。

任何想法,任何提示?

【问题讨论】:

  • 也许它正在以文本模式处理?在文本模式下,它只能处理 ASCII 字符。 Data Matrix - Wikipedia 两种软件中是否有任何选项可以在编码和解码时显式指定 Base256 模式?也许如果您正在处理 ISO-8859-1 编码数据,您可能需要设置这些模式和选项以将字符串转换为字节数组。
  • 您能分享您使用 ISO-8859-1 编码的 DataMatrix 条形码图像吗?我们会将案件转交我们的研究小组进行进一步调查。谢谢! -- 来自 ML Kit 团队
  • @JulieZhou 刚刚添加了一个带有 ISO-8859-1 编码的官方德国药物计划数据矩阵的示例。提前感谢您的帮助!
  • 感谢 Dirk,将进一步查看示例条码。
  • 谢谢你,朱莉!希望有一个解决方案 - 这是一个相当常见的用例。丑陋的是我们仍然必须处理非 unicode 编码,但别无选择。

标签: android kotlin barcode-scanner google-mlkit datamatrix


【解决方案1】:

条形码图片的问题是条形码周围没有填充,这将返回一个空结果。

在条码内容周围添加一些填充后,就会检测到条码。

【讨论】:

  • 对不起,填充,但它仍然失败。在我的应用程序中,barcode?.rawvalue 的输出包含随机的“未知编码”字符串:<MP v="026" U="E96E28692A2444A38661426EBEDAF0A8" l="de-DE"><P Unknown encoding="U123456789" ... ZXing 的输出:<MP v="026" U="E96E28692A2444A38661426EBEDAF0A8" l="de-DE"><P g="Bärbel" f="Müller" egk="U123456789" ...
  • 您好,通过使用 mlkit vision quiclkstart 应用程序和您的 BarcodeScanner 设置,我可以在扫描此条形码时从实时预览中获得结果,也可以将此图像下载到我的设备并转换为位图。您能否在此处查看 mlkit 快速入门应用程序代码:github.com/googlesamples/mlkit/blob/… 以从 url 读取位图并将其提供给条形码扫描仪 api? InputImage 可能存在问题。
  • 嗨晨曦,现在,我用 Vision QuickStart 重试了一次,结果还是一样,但又坏了。请参阅由于非 ASCII 字符而破坏 XML 的“未知编码”字符串:2021-03-03 20:22:21.496 18480-18480/com.google.mlkit.vision.demo I/BarcodeProcessor: <MP v="026" U="E96E28692A2444A38661426EBEDAF0A8" l="de-DE"><P Unknown encoding="U123456789" b="19400101"/> ...
  • 抱歉误读了您之前的回复。我将与内部团队核实,看看他们是否可以改善这一结果。 "条形码原始值:

  • 嗨 Dirk Spöri,您介意我们在内部单元测试中使用这个 image 吗?
【解决方案2】:

使用最新版本的 ML Kit 条形码扫描库 16.1.2,rawBytes 方法现在返回 QR 码的预期内容,也适用于非 unicode 编码。

implementation 'com.google.mlkit:barcode-scanning:16.1.2'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-12
    • 2011-02-12
    • 2019-12-17
    • 2021-06-02
    相关资源
    最近更新 更多