Trabajo en MongoDB en el equipo de Herramientas para Desarrolladores, así que la Shell y la GUI y la extensión de VSCode para la base de datos, pero esta charla no tiene absolutamente nada que ver con eso. Así que vamos a empezar.
Hace aproximadamente un mes vi este tweet que se hizo bastante popular en Twitter y ya sabes... Algunas personas se ríen, entienden el chiste. Obviamente, la forma más fácil de obtener la longitud de una cadena de texto en JavaScript es hacer un spread de objeto en ella, luego llamar a object.keyson.object y luego usar el método reduce del prototipo de array para sumar la longitud de ese array. Todos sabemos cuál es el chiste. Pero retrocedamos un poco.
¿Por qué las codificaciones de caracteres a veces son algo de lo que nos preocupamos o con lo que tenemos que lidiar? La situación típica en la que te encuentras es que eres un desarrollador de software y estás escribiendo software. Estás escribiendo un programa. Ese programa no existe de forma aislada. Hay algo más ahí fuera, literalmente cualquier cosa excepto tu programa, como el sistema de archivos, la red, otros programas, otros ordenadores, cualquier cosa así. Y obviamente quieres que tu software pueda comunicarse con ellos. La forma predeterminada de comunicar cualquier cosa es usar cadenas de texto. Puedes poner básicamente cualquier cosa en una cadena de texto. Cualquier dato que tengas puedes serializarlo en una cadena de texto. Así que sería bueno si pudiéramos hablar con estos otros programas usando cadenas de texto. Desafortunadamente, no funciona así.
Tu programa normalmente se ejecuta en un sistema operativo que no tiene idea de lo que es una cadena de texto. Si es un programa de Javascript, que será el caso para muchos de ustedes, una cadena de texto de Javascript es algo que el motor de Javascript entiende, pero tu sistema operativo no tiene idea de qué hacer con eso. No puedes pasarlo directamente a eso. Eso también significa que no puedes pasarlo a otras cosas. Entonces, la solución que la gente ideó es, tienes tu cadena de texto, y para cada carácter en esa cadena de texto le asignas a ese carácter un número, y luego ideas una forma ingeniosa de asignar o convertir esos números en una secuencia de bytes. Y esto parece una discusión muy básica, pero creo que es importante tener esa distinción en mente.
Cuando digo cadenas de texto, me refiero a secuencias de caracteres, como texto. Esta representación intermedia, que en su mayoría no te importa, la voy a llamar puntos de código, porque ese es el lenguaje que Unicode usa para esto, y luego tu salida es una secuencia de bytes. Obviamente, al decodificar se realizan estos pasos en sentido inverso. Si te llevas algo de esta charla, es que las cadenas de texto y las secuencias de bytes son cosas diferentes. Históricamente, la forma en que las personas han abordado esto, en los años 70 cuando los estadounidenses aún no habían descubierto que hay algo más que América en el mundo, se ideó una forma de asignar, una forma estándar de asignar números a los caracteres, y esos eran caracteres del 1 al 128, y eso es suficiente espacio para los alfabetos inglés en minúsculas y mayúsculas y algunos caracteres especiales y, ya sabes, ¿quién necesita más que eso? Luego vino la siguiente iteración, que es un poco más popular alrededor de los años 90, ya sabes, descubres que hay otros idiomas además del inglés, y dices, bueno, ASCII son 128 caracteres, así que 7 bits, los bytes suelen tener 8 bits, así que tenemos otros 128 caracteres disponibles. Y la solución que la gente ideó fue, ya sabes, probablemente vas a tener texto griego, o texto eslavo, o texto árabe, no vas a mezclar estos probablemente. Así que, para cada uno de estos, creas una codificación de caracteres.
Comments