Lightpanda
Código de Lightpanda: convertir bytes de cabeceras en cadenas JSON seguras para CDP
Examina validación UTF-8, alternativa Latin-1, entradas inválidas mixtas, escape JSON y nombres de campos en SafeString.
Qué aprenderás
- Valida toda la secuencia antes de elegir representación.
- Latin-1 no equivale a Windows-1252 ni detecta codificaciones.
- Cubre valores y nombres de campos por separado.
Antes de empezar
- HTTP, JSON y ciclos de navegador básicos
- Muestra propia con salida esperada explícita
Explica el límite de implementación y verifica la tarea propuesta o el modelo independiente de bytes.
Conclusiones clave
- Valida toda la secuencia antes de elegir representación.
- Latin-1 no equivale a Windows-1252 ni detecta codificaciones.
- Cubre valores y nombres de campos por separado.
Por qué una cabecera puede romper una respuesta
SafeString.zig envuelve secuencias que pueden no ser UTF-8 válido, por ejemplo valores originales de cabeceras de red. Sus comentarios explican que un serializador genérico puede convertir bytes inválidos en un arreglo numérico cuando CDP espera una cadena. En nombres de campos, UTF-8 inválido también puede provocar que un cliente estricto cierre un frame de texto WebSocket.
Primero valida toda la secuencia como UTF-8. La entrada válida usa el escritor JSON normal; la inválida pasa a una cadena entre comillas que mapea cada byte alto a su código U+0000–U+00FF y mantiene escape JSON en los tramos ASCII. Valores y claves tienen entradas separadas con la misma idea de alternativa.
Latin-1 es una política, no detección de codificación
Un byte E9 aislado se convierte en é; la secuencia válida C3 A9 permanece como é UTF-8. Al combinar bytes UTF-8 válidos con uno inválido, falla la validación del conjunto y todos se interpretan mediante la alternativa. No conserva islas válidas reparando únicamente el byte problemático.
El byte 80 ilustra una distinción importante: el mapeo directo ISO-8859-1 produce U+0080, no el euro de Windows-1252. Nuestro modelo didáctico JavaScript transforma bytes explícitamente, evitando etiquetas de decodificador con otras reglas heredadas. También conserva una marca de orden de bytes UTF-8 válida en lugar de eliminarla silenciosamente.
Prueba el contrato sin exagerar lo ejecutado
El código incluye pruebas de texto válido, valores Latin-1, comillas, saltos y nombres de campos. Inspeccionamos esas pruebas Zig, pero no las ejecutamos porque aquí no está instalada la herramienta necesaria. El ejemplo es un modelo JavaScript independiente de la decisión, ejecutado con bytes inventados; no es la implementación del proyecto.
Una regresión útil verifica tipo, puntos de código y recorrido de ida y vuelta JSON, no solo una palabra visualmente parecida. Documenta la entrada mixta como comportamiento alternativo, no como reparación universal de codificaciones. Esta frontera muestra por qué mantener un contrato de cadena puede requerir más que entregar bytes a un serializador genérico.
Pasos de implementación
- 1
Lee las ramas de validación y alternativa.
- 2
Compara UTF-8 válido, byte alto y entrada mixta inválida.
- 3
Comprueba puntos de código y recorrido JSON.
- 4
Distingue el modelo didáctico de la ejecución Zig.
Ejemplo para copiar
// Modelo didáctico, no la implementación Zig del proyecto.
function headerText(bytes) {
try {
return new TextDecoder("utf-8", { fatal: true, ignoreBOM: true }).decode(bytes);
} catch {
return Array.from(bytes, byte => String.fromCodePoint(byte)).join("");
}
}
const text = headerText(Uint8Array.of(0xE9));
console.log(JSON.stringify({ header: text }));Preguntas frecuentes
¿Se ejecutó la suite Zig del proyecto?
No. Se inspeccionaron código y pruebas; localmente se ejecutó un modelo didáctico JavaScript independiente.
¿La alternativa detecta la codificación original?
No. Aplica una política definida de byte a punto de código tras fallar la validación UTF-8 del conjunto.
Fuentes
- README.mdFuente verificada 2026-09-08
- LICENSEFuente verificada 2026-09-08
- DockerfileFuente verificada 2026-09-08
- build.zig.zonFuente verificada 2026-09-08
- src/Config.zigFuente verificada 2026-09-08
- src/browser/Browser.zigFuente verificada 2026-09-08
- src/server/cdp/domains/target.zigFuente verificada 2026-09-08
- src/server/cdp/domains/page.zigFuente verificada 2026-09-08
- src/server/cdp/domains/lp.zigFuente verificada 2026-09-08
- src/server/cdp/SafeString.zigFuente verificada 2026-09-08
- src/network/RobotsGate.zigFuente verificada 2026-09-08
- src/telemetry/telemetry.zigFuente verificada 2026-09-08