

¿Qué es Unicode? En 2003, Joel Spolsky escribió sobre Unicode y por qué todos los desarrolladores deben entender qué es y por qué es importante. Recuerdo haber leído ese artículo (y desde entonces olvidé la mayoría), pero me sorprendió lo importantes que son los conjuntos de personajes y Unicode. Así que hace dos años publiqué la primera versión de esta publicación de blog sobre Unicode. Ahora pensamos que es hora de ver a nuestro viejo amigo Unicode y ver por qué es importante en el mundo lleno de emoji 🦄💩. ¡Es posible que no te das cuenta, pero ya trabajas con Unicode si trabajas con WordPress! Entonces, veamos qué es y por qué es importante para los desarrolladores.
Para responder a la pregunta “¿Qué es Unicode?” Primero deberíamos echar un vistazo al pasado. Codificando ASCII antes de ingresar a Unicode, tenemos que hacer poca historia (mi diploma de historia de 4 años finalmente se usa 🎉). En el momento en que se inventó UNIX, los personajes eran de 8 bits (1 byte) memoria. En esos tiempos, el uso de la memoria era muy grande, porque, ya sabes, las computadoras tenían muy poco. David C. Zentgram tiene un gran ejemplo de cómo funciona esto en su blog: 01100010 01101001 01110100 01110011 Bits Todos los 1 y 0 son binarios y representan cada personaje a continuación. Pero escribir en binario es un trabajo duro y sería una locura si lo hicieras todo el tiempo. ASCII fue creado para ayudar a esto y es esencialmente una tabla de búsqueda de bytes en los caracteres.

La tabla ASCII tiene 128 caracteres estándar (tanto superior como en minúsculas y 0-9). En realidad, solo hay 95 personajes alfanuméricos, lo que suena bien si hablas inglés. De hecho, cada personaje requiere solo 7 bits, ¡así que hay una pieza! Esto ha llevado a la creación de la tabla ASCII extendida, que tiene otras 128 cosas fantasiosas como C y Æ, así como otros personajes. Desafortunadamente, esto no es suficiente para cubrir la gran variedad de personajes utilizados en idiomas de todo el mundo, por lo que las personas han creado sus propias codificaciones. A finales de los años 90, había al menos 60 tablas ASCI extendidas (y algunas menos) para observar. Probablemente deberíamos estar agradecidos de que todos compartieran al menos los primeros 128 caracteres. Pero, por necesidad, usaron los 128 caracteres adicionales muy diferentes, tan diferentes que la selección accidental de la tabla incorrecta podría hacer un texto imposible. Maravillosa. La codificación del personaje ha roto bien Internet, por lo que ahora sabemos cómo hacer con todos esos cuerpos de codificación de caracteres que ha encontrado, como Microsoft Windows-1252 y Big5-People tuvieron que representar su propio idioma y un conjunto único de caracteres . Y esto funcionó en gran medida cuando los documentos no se compartieron con otras computadoras. Ya sabes, tiempo antes de Internet.
Internet rompió todo esto porque la gente comenzó a enviar documentos codificados en su codificación nativa a otras personas. A veces las personas no usaban la misma codificación y vieron algo como esto como una línea de asunto para el correo electrónico:

���� [ef���oi oc µC��� ¢ !! Para complicar más las cosas, algunas codificaciones usarían 16 bits en lugar de 8. Esto crearía tablas de búsqueda masivas. Mucho más grande que para asci! ASCII? ¿Qué ascii? Durante mucho tiempo, la mesa de 256 caracteres funcionaron bien. Era simple y eficiente. De hecho, fue un problema: ¿cuál pregunta? Cuando nos enviamos las cosas a través de Internet, es importante darle al destinatario la oportunidad de adivinar qué ASCII usamos. A lo largo de los años, se ha vertido mucha energía en un intento de hacer todas estas codificaciones para jugar maravillosamente con el correo electrónico, hojas de cálculo, documentos web y páginas. Cuando visita una página web simple, hay muchas técnicas diferentes en uso , incluyendo Guess calificada, que intentan asegurarse de ver los personajes correctos. El lugar más obvio que notará como desarrollador es en el documento HTML en sí. Puede agregar una etiqueta en HTML para decirle al navegador que está utilizando el carácter latino en Europa occidental. Si falta esa etiqueta, el navegador analizará los encabezados de respuesta en el servidor web y puede encontrar una declaración adicional establecida en el encabezado de tipo de contenido. El documento HTML también puede anular el tipo de contenido enviado por el servidor web agregando un .
Pero la verdadera diversión no comenzó hasta que estos tres lugares diferentes dijeron cosas diferentes sobre el conjunto de personajes o cuando se demostró que el conjunto de personajes declarado no es lo que realmente se usa en el resto del documento.Había una razón por la cual las versiones antiguas de Chrome y Firefox permitieron al usuario cambiar manualmente la codificación.Correos electrónicos El sistema de correo electrónico tenía su propia historia triste detrás de apoyar a los personajes internacionales.La mayor parte de la tristeza proviene del hecho de que el protocolo SMTP básico aún requiere que el contenido transferido sea de 7 bits.Este pequeño problema a menudo se resuelve utilizando la codificación de codificación citada, una técnica de transferencia de caracteres de 8 bits a través de un protocolo de 7 bits, de modo que los caracteres ASCA extendidos se puedan enviar en un correo electrónico.Probablemente haya visto que la codificación de impresión citada salió mal:
Sujeto: R = C3 = A4KSM = C3 = B6RG = C3 = A5S Aunque la codificación citada es una solución inteligente, solo resuelve una parte del problema. El cliente de correo electrónico que recibe todavía tiene que averiguar cuál de todas las tablas ASCI posibles para usar. Casi todos los correos electrónicos enviados hoy usan el estándar MIME para el contenido de correo electrónico real. MIME nos permite enviar archivos adjuntos, correo electrónico HTML y, a menudo, una versión adicional de texto simple para los clientes de correo electrónico básicos, menos capaces. En cada una de estas piezas de MIME, el cliente de correo electrónico debe agregar la sede para la codificación de transferencia de contenido ‘y el tipo de contenido “y asegurarse de agregar el carácter apropiado. Wikipedia enumera a más de 50 clientes de correo electrónico diferentes. En un diagrama a Compare características. ¿Has apuesto a que todos estos clientes tratan a los personajes internacionales exactamente de la misma manera? No lo haría.
A mediados de la década de 1990, la gente comenzó a pensar en personajes internacionales en nombre de los dominios. El sistema DNS inicial (e incluso) solo permite el uso de ASCI de 7 bits en nombre de dominios, lo que significa que realmente no son personajes internacionales posibles. Entonces, el mismo problema tuvo que ser resuelto nuevamente. Pero, en lugar de reutilizar las impresiones citadas imprimibles, ITF lo pensó bien y vino con el uso de PonyCode, que es un paso muy importante. El código de empuje permite la codificación de cualquier carácter de 8, 16 o 32 bits (sí, treinta y dos) solo usando letras, números y guiones que se encuentran en la tabla ASCII original de 7 bits. Por ejemplo, la palabra sueca para sándwich de camarones es “raksmorgas”. En el pequeño código, se representaría como “xn-rksmrgs-5wao1o”. Entonces, si saliera y compre el nombre de dominio raksmorgas.com (disponible en este momento), en realidad compraría xn-rksmrgs-5wao1o .com .Com .Com. . Pero todos los navegadores modernos se verían justos de que “raksmorgas.com” el trabajo inteligente aquí era permitir a los personajes en una tabla de caracteres mucho más alta que solo los 256 personajes posibles con ASCI extendida. Tal tabla de personajes acababa de comenzar a tener una verdadera tracción. En otras partes de la industria, alguien finalmente estaba cansado de ver a Gobbledygook en sus documentos web, correos electrónicos y páginas y decidió crear Unicode para unificar todas estas codificaciones.
Ingrese Unicode Unicode es en realidad solo otro tipo de codificación de caracteres, sigue siendo una búsqueda de mordida -> caracteres. La principal diferencia entre Unicode y ASCII es que Unicode permite que los caracteres sean hasta 32 bits. Es decir, más de 4 mil millones de valores únicos. Pero por diferentes razones, no todo ese espacio se utilizará, de hecho, solo habrá 1,111,998 caracteres en Unicode. Pero eso debería ser suficiente para cualquiera. Pero con Unicode, ¿no ocuparán todos los documentos, correos electrónicos y páginas web 4 veces más espacio que con ASCII? Bueno, afortunadamente no. Junto con Unicode, se producen varios mecanismos de representación o codificación de caracteres. Estos son principalmente los esquemas de codificación UTF-8 y UTF-16, que adoptan un enfoque verdaderamente inteligente para el tamaño de la dimensión. Los esquemas de codificación unicode como UTF-8 son más efectivos en cómo usan sus bits. Con UTF-8, si un personaje se puede representar con 1 byte, esto es todo lo que usará. Si un personaje necesita 4 bytes, recibirá 4 bytes. Esto se llama codificación de longitud variable y es más eficiente en términos de memoria. Las codificaciones de Unicode son simplemente cómo un software implementa el estándar Unicode. Como dice Adam Hooper: UTF-8 ahorra espacio. En UTF-8, los personajes comunes como “C” toman 8 bits, mientras que los personajes raros como “💩” toman 32 bits. Otros personajes tienen 16 o 24 bits. Una publicación de blog que ocupa aproximadamente cuatro veces menos espacio en el UTF-8 que en UTF-32. Entonces se carga cuatro veces más rápido.
UTF-8 es, con mucho, la codificación más común que se reunirá en la web. Lo mejor del UTF-8 es que los primeros 128 puntos de código son exactamente los mismos que el ASCII. Entonces UTF-8, si eres hablante de inglés, es exactamente lo mismo que ASCII. Todo esto es importante hoy debido al 🚀 emoji. Después de todo, los emoji son solo personajes, como la letra “A” o “Z”. Debido a que Unicode es lo suficientemente flexible como para usar cualquier cantidad de bits que necesite, el emoji se puede agregar con bastante facilidad a los conjuntos de caracteres Unicode. El estándar Unicode ahora incluye 144,076 caracteres que comienzan con la versión 13.1. Incluye todos sus emoji favorito, así como personajes utilizados en casi todos los idiomas del planeta. Los caracteres Unicode COD se pueden referir los caracteres Unicode por su punto de código. Este artículo de Overflow de pila hace un buen trabajo explicando cuál es el punto de código: un punto de código es la unidad atómica (unidad irreducible) de información. El texto es una sucesión de puntos de código. Cada punto de código es un número al que se da el estándar Unicode. El UNICODE estándar actual define 1,114.112 puntos de código: esto significa mucho 🍝. Unicode continúa dividiendo todos esos puntos de código en 17 planes o grupos. No tenemos que saber todo sobre la operación interna en Unicode, pero es útil comprender de dónde proviene. Para acceder a los puntos de código, usamos la siguiente sintaxis: U+(número hexadecimal de punto de código) Se utiliza el sistema de numeración hexasecimal porque es una forma más corta de referirse a grandes números. Por lo tanto, verá cosas como U+1F4A9 o ὂ9 en tablas de emoji. P.ej:

| 💩 | U+1F4A9 | 0001 1111 0100 1010 1001 |
Para hacer las cosas más complejas, Algunos caracteres se pueden expresar como una combinación de puntos de código. E se puede representar en Unicode como U+0065 (Latín en minúsculas E) seguido de U+0301 (acento agudo), pero también se puede representar como el carácter pre -compuesto U+00e9 (Litin Little EC. Sobre esto, cuando observamos la implementación de Unicode por JavaScript, pero complejo o no, Unicode es el estándar internacional para la codificación y no para todo 🌹☀️. Problemas con unicods diferentes lenguajes de programación, sistemas operativos, incluso las aplicaciones iOS administran unicodios de manera diferente y todavía hay mucha confusión sobre lo que realmente es unicode. Veamos algunos ejemplos que están cerca de casa. PHP Comenzaremos con Elepant en la habitación, PHP. Declaraciones de PHP en su página de documentación con cadenas que solo aceptan un conjunto de 256 caracteres. Lo que esto realmente significa es que PHP supone que 1 byte = 1 carácter para cadenas. En realidad, esto es algo que encontré trabajando en la función Lot para el suplemento de archivo con el tema y el complemento en WP Migrate DB Pro. Si quieres obtener el tamaño, en bytes, una cadena, ¡solo cuente los caracteres! Strlen () para una cadena en PHP es esencialmente cuántos bytes ocupan. Enfriar. Buuuut, ¿qué pasa con una cuerda que contiene a este chico malo? ¿Cuántos bytes serías? ¿Una? echo strlen (‘🔥’);
// Salidas: 4 Ve a casa Php estás borracho. Aquí intervienen las funciones de los múltiples múltiples del PHP. Para obtener la longitud legítima de la cadena 🔥, en los caracteres, debe usar mb_strlen (). echo mb_strlen (‘🔥’); // Salidas: 1 ¡FROL! Entonces eso funciona. Pero, ¿cuál era la longitud de 4 con el estándar stand ()? Como mencioné anteriormente, PHP considera que 1 carácter = 1 byte, por lo que verifica el tamaño de una cadena. ¡Emoji 🔥 en realidad ocupa 4 bytes de memoria! Qué cerdo de memoria 🐷. En realidad, sin embargo, PHP confunde Unicode solo si maneja las cuerdas. Si simplemente obtiene o quita las cuerdas, a PHP no le importa y funcionará muy bien. Pero si intenta obtener subcepturas o longitudes de cuerdas, manténgase con funciones multibyte. Y vale la pena mencionar, incluso en el PHP 8, la biblioteca de cadenas multiochete todavía es entregada por la extensión MBSSTRING que no se activa de forma predeterminada. Asegúrese de activar esta extensión al instalar PHP solo. Se activarán los hosts y paneles de control de WordPress más respetables, incluido nuestro propio panel de control, spinUpwp. Los amigos falsos en las funciones PHP PHP UTF8_ENCODE () y UTF_DECODE () suenan como si fueran realmente útiles cuando trabajan con cadenas Unicode. Bueno, estos son siempre que esté 100% seguro de que solo trabaja con ISO-8859-1 ASCII, que son los caracteres predeterminados en PHP. Como el manual de PHP enfatiza correctamente:
Muchas páginas web marcadas mediante el uso de la codificación de caracteres ISO-8859-1 realmente usan una codificación similar de Windows-1252 … Si tiene que estar absolutamente seguro para convertir correctamente las cadenas hacia y desde el UTF-8 utilizando la codificación correcta de ASCII. , debe echar un vistazo a la función MB_Convert_String (), ya que permite la definición explícita de las codificaciones utilizadas. Al igual que con las otras funciones mb_*, MB_Convert_String () también es entregado por la extensión MBSSTRING. Los motores JavaScript JavaScript usan UTF-16 interno, otra codificación de longitud variable. Si recuerda que UTF-16 se asemeja a UTF-8, excepto que la menor cantidad de bit utilizada es 16. Los caracteres simples como “C” usan 16 bits, mientras que los caracteres fantasiosos usan 32 bits. En JavaScript, las cadenas se tratan como unidades de código UTF-16, todo lo que realmente significa es que puede necesitar dos puntos de código para referirse a un carácter. Let caca = ‘💩’; consola .log (poop.length); // salidas 2 similares a strlen () de PHP, la longitud de la longitud de JavaScript devolverá la longitud del código de un carácter. Debido a que JavaScript utiliza el tipo de codificación UTF-16, los caracteres complejos como Emoji tendrán una longitud de 2. Let Poop = ‘💩’

consola .log (caca) // 💩 Consola .log (poop.length) // 2 Puede usar esta herramienta en cuestión para convertir emoji u otros caracteres en sus valores hexadecimales. Cuando se usa funciones como String.Prototype.Slica () o String.prototype.substring () es importante considerar esto. Básicamente, en JavaScript, piense en cadenas de caracteres como unidades de código y estará bien. Comenzando con ES2015 String.prototype.normalize está disponible. Le permite convertir las cadenas de caracteres en un formato unicode estandarizado. Esto es útil si tiene cadenas que podrían haber sido codificadas incorrectamente o si compara las longitudes. El tema de JavaScript, Unicode y Code Units es grande, pero le recomiendo que lea la publicación de Dimitri si desea obtener más información. Es una apertura de los ojos. Los problemas de MySQL MySQL con Unicode son donde encontré la compatibilidad por primera vez con la codificación de caracteres. En ese momento comencé a perder el cabello. Al igual que PHP, MySQL no acepta completamente UTF-8, o incluso Unicode. La codificación del UTF8 de MySQL no es en absoluto UTF-8. La codificación UTF8 que todos usamos ese día usa solo 3 bytes. ¿Por qué? Bueno, ¿quién demonios necesitaría más de 3 bytes, 24 bits enteros, para representar un solo personaje!
¿Por qué es una historia larga (le sugiero que leas el artículo de Adam si quieres escucharlo), pero se lanzó un remedio en 2010 que nos trajo la codificación de UTF8MB4? Se ha agregado el conjunto de caracteres UTF8MB4. Esto es similar al UTF8, pero su codificación permite que hasta cuatro bytes por personaje permitan el soporte de caracteres adicionales. Eso es genial. Entonces, si usa el conjunto de caracteres UTF8, no verá ninguna fantasía 😬. WordPress hizo esto en 2015 e hizo un valor predeterminado de UTF8MB4 para nuevas instalaciones, así como para tablas actualizadas para usar la nueva codificación, si es posible. Consejo profesional, para una inmersión más en la base de datos de WordPress, consulte nuestra base de datos de WordPress. Siendo alguien que trabaja en un complemento de migración de base de datos, me mordió varias veces y a menudo tenemos clientes que nos envían un correo electrónico con problemas de migración de una base de datos codificada por UTF8MB4 a una base de datos codificada de UTF8. ¡Gracias mysql! Tenemos una solución, pero la mejor opción es asegurarnos de que ambas partes involucradas en una migración usen el conjunto de caracteres UTF8MB4. Tl;

homefinance blog