使用 ISO-8859-1 编码解析 DataMatrix 时出现未知编码错误
Posted
技术标签:
【中文标题】使用 ISO-8859-1 编码解析 DataMatrix 时出现未知编码错误【英文标题】:Unknown encoding error when parsing DataMatrix with ISO-8859-1 encoding 【发布时间】: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 编码,但别无选择。 【参考方案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"/> ...
抱歉误读了您之前的回复。我将与内部团队核实,看看他们是否可以改善这一结果。 "条形码原始值:使用最新版本的 ML Kit 条形码扫描库 16.1.2,rawBytes
方法现在返回 QR 码的预期内容,也适用于非 unicode 编码。
implementation 'com.google.mlkit:barcode-scanning:16.1.2'
【讨论】:
以上是关于使用 ISO-8859-1 编码解析 DataMatrix 时出现未知编码错误的主要内容,如果未能解决你的问题,请参考以下文章
使用 NSString 将 UTF-8 编码转换为 ISO 8859-1 编码