Estoy confundido acerca de la codificación de texto y el juego de caracteres. Por muchas razones, tengo que aprender cosas no Unicode, no UTF8 en mi próximo trabajo.
Encuentro la palabra "charset" en los encabezados de los correos electrónicos como en "ISO-2022-JP", pero no existe tal codificación en los editores de texto. (Miré a los diferentes editores de texto).
¿Cuál es la diferencia entre la codificación de texto y el juego de caracteres? Le agradecería que me mostrara algunos ejemplos de casos de uso.
Respuestas:
Básicamente:
fuente
Cada codificación tiene un conjunto de caracteres particular asociado, pero puede haber más de una codificación para un conjunto de caracteres dado. Un juego de caracteres es simplemente lo que parece, un conjunto de personajes. Hay una gran cantidad de conjuntos de caracteres, incluidos muchos destinados a secuencias de comandos o idiomas particulares.
Sin embargo, estamos avanzando en la transición a Unicode, que incluye un conjunto de caracteres capaz de representar casi todos los scripts del mundo. Sin embargo, hay múltiples codificaciones para Unicode. Una codificación es una forma de asignar una cadena de caracteres a una cadena de bytes. Los ejemplos de codificaciones Unicode incluyen UTF-8 , UTF-16 BE y UTF-16 LE . Cada uno de estos tiene ventajas para aplicaciones particulares o arquitecturas de máquinas.
fuente
Además de las otras respuestas, creo que este artículo es una buena lectura http://www.joelonsoftware.com/articles/Unicode.html
El artículo se titula " El mínimo absoluto que todo desarrollador de software debe saber absolutamente, positivamente sobre los conjuntos de caracteres y Unicode (¡sin excusas! " ) Escrito por Joel Spolsky . El ensayo tiene más de 10 años pero (desafortunadamente) el contenido sigue siendo válido ...
fuente
Una codificación de caracteres consta de:
El Paso # 1 en sí mismo es un "repertorio de caracteres" o "conjunto de caracteres" abstracto, y # 1 + # 2 = un "conjunto de caracteres codificado".
Pero antes de que Unicode se hiciera popular y todos (excepto los asiáticos del este) usaran una codificación de un solo byte, los pasos # 3 y # 4 eran triviales (punto de código = unidad de código = byte). Por lo tanto, los protocolos más antiguos no distinguían claramente entre "codificación de caracteres" y "conjunto de caracteres codificados". Los protocolos más antiguos se usan
charset
cuando realmente significan codificación.fuente
Al arrojar más luz para las personas que visitan en adelante, espero que sea útil.
Conjunto de caracteres
Hay caracteres en cada idioma y la colección de esos caracteres forma el "conjunto de caracteres" de ese idioma. Cuando se codifica un carácter, se le asigna un identificador único o un número llamado como punto de código. En la computadora, estos puntos de código estarán representados por uno o más bytes.
Ejemplos de conjunto de caracteres: ASCII (cubre todos los caracteres en inglés), ISO / IEC 646, Unicode (cubre caracteres de todos los idiomas vivos del mundo)
Conjunto de caracteres codificados
Un conjunto de caracteres codificados es un conjunto en el que se asigna un número único a cada carácter. Ese número único se llama "punto de código".
Los juegos de caracteres codificados a veces se denominan páginas de códigos.
Codificación
La codificación es el mecanismo para mapear los puntos de código con algunos bytes para que un carácter pueda leerse y escribirse uniformemente en diferentes sistemas usando el mismo esquema de codificación.
Ejemplos de codificación: esquemas de codificación ASCII, Unicode como UTF-8, UTF-16, UTF-32.
Elaboración de los 3 conceptos anteriores.
09 15
) cuando se usa la codificación UTF-16FC
mientras que en "UTF-8" se representa comoC3 BC
y en UTF-16 comoFE FF 00 FC
.09 15
), tres bytes con UTF-8 (E0 A4 95
) o cuatro bytes con UTF-32 (00 00 09 15
)fuente
Un conjunto de caracteres, o repertorio de caracteres, es simplemente un conjunto (una colección desordenada) de caracteres. Un conjunto de caracteres codificados asigna un número entero (un "punto de código") a cada carácter del repertorio. Una codificación es una forma de representar puntos de código inequívocamente como una secuencia de bytes.
fuente
Buscado en Google para ello. http://en.wikipedia.org/wiki/Character_encoding
La diferencia parece ser sutil. El término charset en realidad no se aplica a Unicode. Unicode pasa por una serie de abstracciones. caracteres abstractos -> puntos de código -> codificación de puntos de código a bytes.
Los charsets realmente omiten esto y saltan directamente de caracteres a bytes. secuencia de bytes <-> secuencia de caracteres
En resumen, codificación: puntos de código -> bytes juego de caracteres: caracteres -> bytes
fuente
Un juego de caracteres es solo un conjunto; contiene, por ejemplo, el símbolo del euro, o no lo tiene. Eso es todo.
Una codificación es un mapeo biyectivo de un conjunto de caracteres a un conjunto de enteros. Si admite el símbolo del euro, debe asignar un número entero específico a ese carácter y a ningún otro.
fuente
En mi opinión, un conjunto de caracteres es parte de una codificación (un componente), la codificación tiene un atributo de conjunto de caracteres, por lo que un conjunto de caracteres se puede utilizar en muchas codificaciones. Por ejemplo, unicode es un juego de caracteres utilizado en codificaciones como UTF-8, UTF-16, etc. Ver ilustración aquí:
El char en charset no significa el tipo de char en el mundo de la programación, significa un char en el mundo real, en inglés puede ser el mismo, pero en otros idiomas no, como el chino, '我' es un 'char' inseparable en los charsets (UNICODE, GB [usado en GBK y GB2312]), 'a' también es un char en charsets (ASCII, ISO-8859 , UNICODE).
fuente
En mi opinión, la palabra "juego de caracteres" debe limitarse a identificar el parámetro utilizado en HTTP, MIME y estándares similares para especificar una codificación de caracteres (una asignación de una serie de caracteres de texto a una secuencia de bytes) por nombre. Por ejemplo:
charset=utf-8
.Sin embargo, soy consciente de que MySQL, Java y otros lugares pueden usar la palabra "charset" para significar una codificación de caracteres.
fuente
Una codificación es una asignación entre bytes y caracteres de un conjunto de caracteres, por lo que será útil analizar y comprender la diferencia entre bytes y caracteres. .
Piense en los bytes como números entre 0 y 255, mientras que los caracteres son elementos abstractos como "a", "1", "$" y "Ä". El conjunto de todos los caracteres disponibles se denomina conjunto de caracteres. .
Cada carácter tiene una secuencia de uno o más bytes que se utilizan para representarlo; sin embargo, el número exacto y el valor de los bytes depende de la codificación utilizada y hay muchas codificaciones diferentes.
La mayoría de las codificaciones se basan en un antiguo conjunto de caracteres y codificación llamada ASCII, que es un byte único por carácter (en realidad, solo 7 bits) y contiene 128 caracteres, incluidos muchos de los caracteres comunes utilizados en inglés de EE. UU.
Por ejemplo, aquí hay 6 caracteres en el conjunto de caracteres ASCII que están representados por los valores 60 a 65.
En el conjunto ASCII completo, el valor más bajo utilizado es cero y el más alto es 127 (ambos son caracteres de control ocultos).
Sin embargo, una vez que comience a necesitar más caracteres de los que proporciona el ASCII básico (por ejemplo, letras con acentos, símbolos de moneda, símbolos gráficos, etc.), ASCII no es adecuado y necesita algo más extenso. Necesita más caracteres (un conjunto de caracteres diferente) y una codificación diferente, ya que 128 caracteres no son suficientes para todos los caracteres. Algunas codificaciones ofrecen un byte (256 caracteres) o hasta seis bytes.
Con el tiempo se han creado muchas codificaciones. En el mundo de Windows, hay CP1252 o ISO-8859-1, mientras que los usuarios de Linux tienden a favorecer UTF-8. Java usa UTF-16 de forma nativa.
Una secuencia de valores de byte para un carácter en una codificación podría representar un carácter completamente diferente en otra codificación, o incluso podría ser inválido.
Por ejemplo, en la norma ISO 8859-1 , â está representado por un byte de valor
226
, mientras que en UTF-8 que es de dos bytes:195, 162
. Sin embargo, en ISO 8859-1 ,195, 162
serían dos caracteres, Ã, ¢ .Cuando las computadoras almacenan datos acerca de los caracteres internamente o los transmiten a otro sistema, almacenan o envían bytes. Imagine que un sistema que abre un archivo o recibe un mensaje ve los bytes
195, 162
. ¿Cómo sabe qué personajes son estos?Para que el sistema interprete esos bytes como caracteres reales (y así los muestre o los convierta a otra codificación), necesita conocer la codificación utilizada. Es por eso que la codificación aparece en los encabezados XML o se puede especificar en un editor de texto. Le dice al sistema la asignación entre bytes y caracteres.
fuente