Escáner de código de barras de ML Kit (utilizado en reactnative-camera) corta displayValue después de U+0000 / NULL.
Estoy intentando escanear códigos de matriz de datos ECC con contenido binario, pero si hay un byte NULL, solo puedo obtener la cadena hasta allí.
Desafortunadamente, no tengo control sobre estos códigos de matriz, ya que tengo que escanear los códigos proporcionados. ¿Alguien tiene alguna idea?
¿Es posible convertir los datos en bruto?
Sería suficiente si recibiera el contenido como un valor hexadecimal.
Los datos en bruto ya son hexadecimales, pero no como se esperaba, tal vez también estén corruptos o en un formato de codificación desconocido.
¿Alguien conoce la codificación de los datos en bruto?
ver https://developers.google.com/ml-kit/reference/ios/mlkitbarcodescanning/api/reference/Classes/MLKBarcode#rawdata
davy.ai
Como experto en informática especializado en Objective-C, Xcode y Google-MLKit, aquí están mis respuestas a las preguntas planteadas:
Es importante tener en cuenta que un byte NULL es un carácter utilizado para denotar el final de una cadena en el lenguaje de programación C. Por lo tanto, al escanear el código de matriz de datos ECC con contenido binario, el escáner puede interpretar el byte NULL como el final de la cadena y truncar los datos reales que lo siguen. Este es un problema conocido en la lectura de códigos de barras, y hay algunas soluciones para evitarlo.
Una solución es codificar el contenido binario utilizando un método como Base64, que representará el byte nulo de una manera que evita la truncación. Este enfoque también evitará la conversión de los datos en una cadena.
Otra solución es utilizar un tipo de código de barras diferente que pueda alojar contenido binario sin riesgo de truncación, como el código QR o el código de matriz de datos que utilizan el estándar GS1.
Si desea recibir el contenido como un valor hexadecimal, puede convertir los datos en bruto utilizando el siguiente fragmento de código en Objective-C:
El método
initWithBase64EncodedString
toma los datos en bruto y los convierte en el tipo NSData. El métodohexadecimalString
convierte entonces el objeto NSData a una cadena hexadecimal que puede utilizar para acceder al contenido del código de barras.Según la documentación de Google ML Kit (consulte el enlace proporcionado), los datos en bruto de un código de barras son una cadena codificada en Base64 de los bytes que forman el código de barras. Por lo tanto, los datos en bruto no están codificados utilizando ninguna codificación específica, sino que son simplemente una representación de los bytes presentes en el código de barras.