En un post anterior explicaba cómo al crear un documento con el notepad con la frase “bush hid the facts” y reabrirlo, el texto aparecía en forma extraña (caracteres chinos -¿o japoneses?- o unos cuadrados dependiendo si se tenían instaladas dichas chinas). Puden ver el post siguiendo este link.

El motivo de esto no es ninguna teoría conspiracionista o algún huevo de pascua de los programadores, sino simplemente a un bug. En este caso, un bug en el block de notas!
Si es que se dan cuenta, al grabar un archivo, la codificación por defecto es ASCII extendido de 8 bits (cada caracter representado por 8 bits o lo que es lo mismo, 1 byte). En hexadecimal el texto es:
62 75 73 68 20 68 69 64 20 74 68 65 20 66 61 63 74 73
Al abrir un archivo el Notepad, lo abre por defecto en formato Unicode de 16 bits, UTF-16, (cada caracter representado por 16 bits, o 2 bytes). Los archivos con codificación UTF-16, traen al inico un Byte Order Mark (BOM) que indica que el archivo tiene dicha codificación. Si el archivo no tiene el BOM (no se olviden que lo graba por defecto en ASCII, así que no tiene BOM), el Notepad llama a una función del API de Windows para “adivinar” (si, trata de adivinar) la codificación. En hexadecimal el resultado de la transformación es (nótese que coge 2 caracteres ASCII para formar los 16 bits):
7562 6873 6820 6964 7420 6568 6620 6163 7473
Si dan click al link de cada número, verán una web en donde muestra qué caracter representa.
La función IsTextUnicode(), según la documentación:
(…) usa varios métodos estadísticos y determinísticos para dar el resultado (de si es o no Unicode) (…) Las pruebas que usa no son ‘a prueba de errores’, los test estadísticos asumen cierta cantidad de variaciones entre los bits altos y bajos en una cadena de texto, y algunas cadenas ASCII se le pueden pasar.
El motivo exacto de porqué el bug ocurre con ciertas frases del tipo 4-3-3-5 (como por ejemplo la de Bush y la de “this app can break”) no la se, pero al menos sabemos que es debido a una función que a veces no va del todo bien.
Nota: El bug ya lleva varios meses de descubierto, pero sigue sin solución en Win 2K/XP (uno de los problemas de no tener el código abierto), sin embargo leo por ahi que en Windows Vista ya solucionaron este bug. Esa debe de ser una de las grandes novedades que anuncian :p
Fuentes:
http://www.steady-rollin.com/content/view/20/
Documentación de la función IsTextUnicode()
http://www.hoax-slayer.com/bush-hid-the-facts-notepad.html. Las capturas de pantallas son de esta web. (gracias a un lector del blog en un comentario)
http://blogs.msdn.com/oldnewthing/archive/2004/03/24/95235.aspx (ídem)
http://blogs.msdn.com/michkap/archive/2005/01/20/357028.aspx#360851 (ídem)
Enviar a Linuxfera Entradas Relacionadas:
Posts RSS
Vía Email













0 Respuestas a “Referencia a Bush en Windows - el motivo”
Añade un Comentario