Español

Texto y herramientas cotidianas · QR y kit de herramientas de códigos de barras

Por qué el texto acentuado a veces se escanea mal en los códigos QR: conjuntos de caracteres y ECI

· Antecedentes

código qr codificación procesamiento del navegador

UTF-8 bytes ingresando a una cuadrícula QR y decodificando en texto acentuado y japonés
Ilustración de vector original de ToolAcre

Explica por qué la interpretación de bytes predeterminada del estándar QR no es UTF-8, qué hace el mecanismo de interpretación de canal extendido y por qué algunos lectores muestran mojibake para texto acentuado o no latino.

El nombre que se escaneó como 'é': cómo se ve mojibake en un código QR decodificado y por qué sucede

Mojibake como é aparece cuando UTF-8 bytes se interpretan bajo otra asignación de caracteres. ToolAcre soluciona ese fallo antes de la generación de la matriz mediante el uso de TextEncoder y sus pruebas con ejemplos de ida y vuelta con acento, japonés y emoji.

La corrupción guarda silencio porque el QR puede seguir siendo estructuralmente válido. Un escáner decodifica bytes, aplica una interpretación de caracteres diferente y muestra el texto incorrecto, por lo que los patrones del buscador y la corrección de errores parecen funcionar. Las pruebas de regresión de ToolAcre comparan la salida decodificada con muestras originales como `café`, texto japonés y emoji. Esto detecta la corrupción semántica que una instantánea visual de módulos negros nunca podría detectar.

ToolAcre precodifica UTF-8 bytes para evitar el comportamiento predeterminado Latin-1 de la dependencia

La dependencia QR subyacente trata su cadena en modo byte como datos de transferencia Latin-1. ToolAcre convierte primero el texto deseado a UTF-8 bytes y asigna cada byte a una unidad de código, de modo que la biblioteca reciba los octetos correctos en lugar de caracteres corruptos.

El contenedor de conversión crea un `Uint8Array`, lo procesa en fragmentos y genera una cadena binaria cuyas unidades de código equivalen a los valores de bytes UTF-8. El paso a través Latin-1 de la biblioteca conserva esos valores en lugar de volver a codificar los caracteres JavaScript originales. La fragmentación evita pasar una cantidad excesiva de argumentos a `String.fromCharCode`, mientras que evitar una mutación de biblioteca global mantiene aisladas a otras personas que llaman.

ECI es solo antecedentes; esta implementación no pretende emitir un encabezado ECI

La interpretación de canal extendida puede etiquetar la codificación de caracteres en sistemas QR, pero no aparece ninguna emisión ECI en esta implementación. Por lo tanto, este artículo no promete un encabezado ECI ni describe uno como el mecanismo detrás del soporte UTF-8 de ToolAcre.

ECI sería una señal separada para un decodificador, pero ToolAcre no solicita ni expone ninguna. Su estrategia de compatibilidad es UTF-8 bytes correctos más pruebas de dispositivo, no un encabezado de codificación anunciado. Esta distinción es importante en el soporte: un viaje de ida y vuelta exitoso al repositorio demuestra la preparación de bytes y la recuperación de la matriz; no puede probar que cada lector externo elija la misma interpretación de caracteres en cada contexto de carga útil.

Las pruebas del repositorio demuestran viajes de ida y vuelta de la matriz, no el comportamiento entre aplicaciones de cámara de terceros nombradas

El repositorio decodifica las matrices generadas en las pruebas y demuestra su propio byte de ida y vuelta. No prueba todas las aplicaciones de la cámara, por lo que las afirmaciones sobre lectores que adivinan UTF-8 o fallan en plataformas específicas requieren evidencia del dispositivo por separado.

El decodificador de unidades utilizado en las pruebas está controlado y es valioso para la regresión, pero no es un catálogo de aplicaciones de cámara. Registre los resultados de los dispositivos que la audiencia realmente usa, incluida la cadena decodificada en lugar de "escaneo exitoso". Dos aplicaciones pueden reconocer un código mientras una muestra mojibake. Informe tal diferencia como evidencia de compatibilidad del lector en lugar de cambiar los bytes de ToolAcre sin comprender el decodificador.

Reducir el riesgo: mantener las cargas útiles en ASCII siempre que sea posible, codificar URL de rutas que no sean ASCII y realizar pruebas en más de un teléfono.

Mantenga las cargas útiles concisas, prefiera las URL HTTPS normales cuando puedan representar contenido multilingüe en una página web y pruebe texto directo no ASCII en dispositivos compatibles. La codificación de URL puede cambiar los bytes de una URL y debe preservar la semántica del destino.

Una URL estable a menudo reduce este riesgo porque la presentación que no es ASCII puede residir en la página de destino mientras que la carga útil QR sigue siendo una dirección ASCII concisa. Si una ruta URL contiene caracteres internacionales, conserve su destino codificado correcto y pruébelo; La codificación porcentual o la transliteración ciegas pueden cambiar la ruta. Para contacto directo o texto sin formato, mantenga la matriz de prueba pequeña y escanee con más de un lector compatible.

Ejemplo resuelto: verificar UTF-8 viajes de ida y vuelta en la implementación y probar lectores externos por separado

Codifique café, 日本 y un emoji en códigos de prueba separados, confirme que el descodificador del repositorio devuelva el texto original y luego escanee las imágenes exportadas con las aplicaciones reales que utiliza su audiencia. Registre las diferencias en lugar de generalizar desde un teléfono.

Utilice tres cargas útiles independientes: `café`, una frase corta en japonés y un emoji, luego decodifique cada una con la ruta de prueba del repositorio y las aplicaciones telefónicas seleccionadas. Compare caracteres Unicode exactos, no capturas de pantalla ni similitudes visuales. Si una aplicación falla, conserve el código exportado y los bytes decodificados para realizar un diagnóstico. La regeneración repetida a partir de entradas idénticas debería producir la misma matriz y no solucionará la diferencia de interpretación del lector.

Lo que esto no cubre: las especificaciones Shift JIS del modo kanji y la representación de fuentes en el dispositivo de escaneo

Los detalles JIS de desplazamiento en modo kanji y la representación de fuentes después de la decodificación están fuera de la implementación. QR almacena bytes; el escáner y la interfaz de destino deciden cómo se presentan los caracteres decodificados a la persona que sostiene el teléfono.

El modo Kanji, Shift JIS y la selección de fuentes post-decodificación están fuera de la implementación. Incluso Unicode correcto puede mostrarse con un glifo faltante en un dispositivo que carece de una fuente adecuada, lo cual es diferente a recibir caracteres incorrectos. Separe la corrupción de bytes, la interpretación del decodificador y la visualización de fuentes al documentar una falla; ocurren en diferentes etapas y requieren diferentes remedios.

La conclusión: pruebe cualquier carga útil que no sea ASCII antes de imprimir; el kit de herramientas de códigos de barras y QR se genera localmente para que pueda iterar rápidamente

La afirmación verificada de ToolAcre es sólida pero limitada: prepara UTF-8 bytes correctamente y recorre cadenas de prueba multilingües de ida y vuelta. Una publicación impresa con cargas útiles que no sean ASCII aún merece una prueba de lector representativa.

El criterio de publicación para la impresión multilingüe es la recuperación exacta en lectores representativos. ToolAcre proporciona preparación UTF-8 verificada y generación local, y su contador de bytes refleja el costo multibyte. El editor aún debe preservar el artefacto probado, evitar ediciones de carga útil no revisadas y revelar los requisitos del lector cuando la compatibilidad sea limitada. Es necesaria una codificación correcta, pero el usuario experimenta toda la cadena de decodificación, interpretación y visualización.