Encoding

hola foro

alguien me podría ayudar con la siguiente duda?

he investigado un poco sobre el tema y he hecho unos cuantos ejemplitos pero todavía no doy con el clavo, aun no he entendido para que se utiilza el encoding en las aplicaciones. No se supone que UTF-8 abarca un conjunto rico de caracteres? entonces para que querria yo poner una codificación distinta a UTF-8?
Pienso que es suficiente con UTF-8 pero no estoy seguro de esto

Gracias por sus respuestas

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de ezamudio

compatibilidad

Puede que recibas cadenas en ISO-8859-1 por ejemplo, de una página web, o que tengas que generar texto en formato ISO-8859-1 para usuarios de Windows. Internamente puedes usar UTF-8 pero podrías tener una JVM configurada para usar como default algun otro encoding.

Los japoneses, chinos, árabes, etc muchas veces usan también un juego de caracteres distinto de UTF-8.

Gracias

Hola ezamudio, muchas gracias por tu respuesta

Oye , pero en sí para que se crearon esos formatos? entiendo que primero estaba el código ascii y como no alcanzaban los caracteres sacaron el UTF,
pero en sí para qué sirven?, es una gran duda que siempre he tenido.
Siempre que quiero poner algo con acentos pues le pongo sin saber qué sucede y con los ojos cerrados UTF-8 pero no entiendo qué pasa o porqué no ponerle ISO8001-X?

Gracias por tu atención

Imagen de Nopalin

para los caracteres mismos

Supongamos que estas utilizando el formato ASCII y tu decides, quiero usar una o, perfecto la combinacion de 8 bits representan la o y tu computadora lo dibuja. Ahora dices quiero la ñ, perfecto igual ASCII tiene una combinacion de esos 8 bits que la representan, pero que un japones diga que quiere un caracter, que combinacion ASCII lo representa? ninguno. Y por estos problemas han salido y salido formatos. El UTF-8 se supone, que al ser de 32 bits, puede soportar todos los caracteres de todos los alfabetos del mundo y aun asi le sobran para futuros.

Tu pregunta quiero pensar es... y por que no todos usan utf-8 y ya? bueno pues en el mundo linux es lo que ya se hace, ve y hazle esa pregunta a microsoft que no se decide a implementarlo todavia.

sobres

Imagen de ezamudio

historia

entiendo que primero estaba el código ascii y como no alcanzaban los caracteres sacaron el UTF

Eso es como decir "entiendo que antes vivíamos en cuevas y ahora tenemos edificios de departamentos", o "entiendo que antes la gente andaba a caballo y ahora traen autos deportivos"... te saltaste un poco de historia. Entre el momento en que salió ASCII y el momento en que salió UTF hubo muchos formatos intermedios y cada quien usaba el que quería. Cuando salieron las Mac, usaron el que creyeron que era mejor que su plataforma (y que por supuesto no iba a ser el mismo que se usaba en DOS); cuando se volvió más popular DOS en otros países ya no era suficiente el puro ASCII y tuvieron que crear encodings como el dichoso "latin1" y cosas así; mientras tanto en Japón se crearon dos encodings, para Katakana y Kanji. En países árabes hicieron sus encodings para sus alfabetos; y así cada quién se fue arreglando como pudo. Todos iban con ISO para tener su propio estándar, pero la bronca es que cada quien tenía su propio estándar. Por eso luego salió Unicode, que abarca todos esos encodings, de modo que ya puedes usar uno solo y ahí contiene toooodoos los caracteres de todos esos encodings. Los sistemas operativos modernos ya lo usan, como menciona Nopalin en Linux ya es el default; en Windows no es el default pero me parece que lo puedes poner (pero nadie se molesta en ponerlo, fuera de uno que otro power user); por qué no es el default, no lo sé, supongo que para mantener una incompatibilidad con Linux y que no sea tan fácil compartir documentos con otros sistemas operativos... o por razones históricas de compatibilidad (siempre usan eso para defender cualquier cosa de su cerradez).

Hoy en día como dices, lo mejor que puedes hacer es usar Unicode y que todo mundo use Unicode y nos quitamos de problemas. Los otros encodings existen porque preceden a Unicode. Ahora, Unicode es una cosa y UTF es otra... UTF es el formato de transformación de Unicode (UTF es el encoding). Digamos que Unicode es únicamente la tablita donde dice qué caracter corresponde a cada número; UTF es la manera en que codificas esos caracteres. UTF8 es para codificar los caracteres en grupos de 8 bits; todos los que van abajo de 128 usan un solo byte; los de 128 para arriba usan 2, 3 o hasta 4 bytes. Este es el que más usamos nosotros porque todo nuestro alfabeto está dentro de los primeros 128 caracteres (excepto ñ y acentos). Pero existe por ejemplo UTF16 que utiliza 2 bytes para cada caracter, ese encoding se usa más en lugares que utilizan comúnmente los caracteres que pasan del 255 (Japón, países árabes, China, etc).

Charset

Ok, agradezco a ambos por su respuesta

Entonces cada que me mandan un documento yo debo utilizar FORZOSAMENTE el mismo encoding o puedo ocupar UTF-8 para uno que está codificado con ISO-6445X ... ? Me suena a que no pero por si las dudas pregunto
Y es lo mismo charset que encoding?

Imagen de ezamudio

encodings

Si lees un documento en un encoding distinto, vas a tener broncas o al menos van a salir caracteres raros en vez de los que deberían salir, o sea en vez de ñ te sale otra cosa, etc.

Los charsets se usan en los encodings. Charset es como la tablita donde dice qué caracter corresponde a qué número. Un encoding interpreta una bola de bytes como texto y usa un charset específico. Por ejemplo el encoding UTF8 va leyendo bytes y para cualquier valor menor a 128 usa directamente ese número para el caracter que se indica. Si se encuentra un número mayor a 128 entonces dependiendo del valor que se haya encontrado, interpreta los siguientes 2, 3 o 4 bytes como un caracter, que a fin de cuentas es un número de 16, 24 o 32 bits que te dice qué caracter es en el charset que se está usando.