Add DRM KMS documentation PDF to the distribution

This commit is contained in:
2026-11-12 13:25:10 -03:00
parent e2195a7ed2
commit 54ac3d140e
3 changed files with 2524 additions and 0 deletions
+74
View File
@@ -306,3 +306,77 @@ Con chunks de ≤ 600 líneas, el contenido cabe en un string JSON sin romper el
> **Nunca escribir más de 600 líneas de una sola vez con `write`.** Si el contenido total es mayor, > **Nunca escribir más de 600 líneas de una sola vez con `write`.** Si el contenido total es mayor,
> usar `write` para la primera parte y `edit` sucesivo para el resto. > usar `write` para la primera parte y `edit` sucesivo para el resto.
---
## 11. Corrección de caracteres malformados (mojibake)
Los capítulos en español pueden acumular **codificación doble**: bytes UTF-8 almacenados como si
fuera Latin-1/CP1252, lo que genera mojibake visible como `ú`, `Práctica` o caracteres
`\xef\xbf\xbd` (replacement char) en vez de "práctica". Esto pasa cuando el parser JSON del tool
de escritura corrompe los bytes multibyte.
### Cómo detectar
```python
import os
path = r"C:\Users\horacio\Desarrollo\c-programming\book\TU-CAPITULO.md"
with open(path, "rb") as f:
raw = f.read()
# Si hay bytes no ASCII pero el archivo se decodifica como UTF-8 bien formado,
# puede haber entidades HTML o caracteres dobles codificados.
try:
text = raw.decode("utf-8")
except UnicodeDecodeError:
print("NO es UTF-8 — hay corrupción de encoding")
# Buscar replacement char U+FFFD (EF BF BD)
if b"\xef\xbf\xbd" in raw:
print("Encontrado replacement char — el archivo tiene mojibake")
# Buscar entidades HTML sueltas (ú, é, ñ)
for ent in [b"ú", b"é", b"ñ", b"á", b"ó", b"ú"]:
if ent in raw:
print(f"Entidad HTML detectada: {ent}")
```
### Cómo corregir (reconstruir UTF-8 limpio)
Si el archivo está corrupto, **borrar y reconstruir** desde un script Python que escriba en
UTF-8 nativo. El pattern probado en producción es:
1. **Borrar el archivo corrupto.** No intentes repararlo con `edit` — si ya tiene entidades HTML
mezcladas con bytes dobles, la reparación parcial deja residuos.
2. **Escribir con un script Python que use `encoding='utf-8'`.** El script construye el contenido
como strings de Python (que son Unicode internos) y lo escribe como bytes UTF-8 limpios.
No uses `write` del agente para contenido > 600 líneas.
```python
# rebuild_chapter.py
chapter_file = r"C:\Users\horacio\Desarrollo\c-programming\book\25-drm-kms.md"
with open(chapter_file, "w", encoding="utf-8") as f:
f.write("# Capítulo 25 — DRM/KMS\n") # texto en Unicode → se escribe como UTF-8 limpio
```
3. **Si el contenido es largo**, dividí en chunks de ~250-300 líneas y uso `open(..., 'a')` para
append cada chunk al archivo ya creado.
4. **Verificar** que no queden caracteres corruptos:
```python
raw = open(path, "rb").read()
text = raw.decode("utf-8", errors="replace")
assert "\ufffd" not in text # sin replacement chars
for ent in [b"ú", b"é", b"ñ"]:
assert ent not in raw # sin entidades HTML sueltas
```
### Regla de prevención
> **Nunca pasar texto con acentos/ñ directamente en un string JSON `write`.** Si el contenido del
> capítulo tiene caracteres UTF-8 multibyte, escribirlo como un bloque grande en `write` puede
> corromper la codificación. La forma segura es: script Python que construya el Unicode interno y
> lo escriba con `encoding="utf-8"`.
+2450
View File
File diff suppressed because it is too large Load Diff
BIN
View File
Binary file not shown.