2010-03-05 17 views
9

Al referirse Joel's ArticleConfusión sobre Unicode y varios bytes artículos

Algunas personas están bajo el idea errónea de que Unicode es simplemente un código de 16 bits, donde cada personaje tiene 16 bits, y por lo tanto no son 65.536 caracteres posibles . Esto no es, en realidad, correcto.

Después de leer todo el artículo, mi punto es que, si alguien te dijo, su texto está en Unicode, no tendrás idea de cuánto espacio de memoria ocupan cada uno de sus personajes. Él tiene que decirle, "Mi texto Unicode está codificado en UTF-8", entonces solo usted tendrá idea de cuánto espacio de memoria ocupa cada uno de sus personajes.

Microsoft::

Unicode = no es necesario 2 bytes para cada carácter


Sin embargo, cuando se trata de Code Project's Article y Microsoft's Help, esto me confunde

Unicode es una Codificación de caracteres de 16 bits , proporcionando suficientes codificaciones f o todos los idiomas Todos los caracteres ASCII se incluyen en Unicode como caracteres "ensanchados".


Proyecto Código:

El conjunto de caracteres Unicode es una "amplia carácter" (2 bytes por carácter) establecer que contiene todos los personajes disponible en todos los idiomas, incluyendo todo símbolos técnicos y caracteres de publicación especiales . Multibyte conjunto de caracteres (MBCS) utiliza ya sea 1 o 2 bytes por carácter

Unicode = 2 byte para cada carácter?

¿Hay 65536 posibles caracteres capaces de representar a todos los idiomas en este mundo?

¿Por qué el concepto parece diferente entre la comunidad de desarrolladores web y la comunidad de desarrolladores de computadoras de escritorio?

Respuesta

11

Había una vez,

  • Unicode tenían sólo los caracteres que caben en 16 bits, y
  • no existía UTF-8 o no era el de facto de codificación a utilizar.

Estos factores llevaron a UTF-16 (o más bien, lo que ahora se llama UCS-2) que se considera sinónimo de “Unicode”, porque era después de todo la de codificación que admite todos Unicode.

Prácticamente, verá que se usa "Unicode" donde se entiende "UTF-16" o "UCS-2". Esta es una confusión histórica y debe ser ignorada y no propagada. Unicode es un conjunto de caracteres ; UTF-8, UTF-16 y UCS-2 son diferentes codificaciones.

(La diferencia entre UTF-16 y UCS-2 es que UCS-2 es una verdadera codificación de 16 bits por "carácter", y por lo tanto codifica solo la porción "BMP" (plano multilingüe básico) de Unicode , mientras que UTF-16 utiliza “pares suplentes” (para un total de 32 bits) para codificar caracteres anteriores-BMP)

+0

OK. Por lo tanto, en el contenido anterior, Unicode significa "codificación Unicode en UTF-16", y no es necesario 16 bits por carácter, y puede ser más que eso. estoy en lo cierto? –

+0

y ¿Qué hay de MBCS? –

+0

Es cierto que UTF-16 no es una codificación de ancho fijo, debido a su uso de pares sustitutos. - Usted tendrá que determinar a partir de otras fuentes o experimentar si los datos que ellos llaman “Unicode” es en realidad UTF-16 (puede tener sustitutos y representar a todos Unicode) o UCS-2 (no puede tener sustitutos; sólo puede representar el BMP porción de Unicode). - no tengo información sobre el término “MBCS”. Sólo –

2

para ampliar @ respuesta de Kevin:.

La descripción es Ayuda de Microsoft es bastante fuera de fecha, que describe el estado del mundo en la línea de tiempo NT 3.5/4.0.

También ocasionalmente verá también UTF-32 y UCS-4, la mayoría de las veces en el mundo * nix. UTF-32 es una codificación de 32 bits de Unicode, un subconjunto de UCS-4. El Unicode Standard Annex #19 describe las diferencias entre ellos.

La mejor referencia que he encontrado describiendo los distintos modelos de codificación es el Unicode Technical Report #17 Unicode Character Encoding Model, especialmente las mesas en la sección 4.

0

¿Es 65.536 caracteres posibles capaces de representar todo el lenguaje en este mundo?

Por qué el concepto parece diferente entre la comunidad de desarrolladores web y comunidad de desarrolladores de escritorio?

Porque la documentación de Windows es incorrecta. Me tomó un tiempo resolver esto. MSDN dice en al menos dos lugares que Unicode es una de 16 bits de codificación:

Una de las razones para la confusión es que en un momento Unicode fue una de 16 bits de codificación . De Wikipedia:

“Originalmente, tanto Unicode e ISO 10646 estaban destinados a ser de ancho fijo, con Unicode siendo de 16 bits”

El otro problema es que hoy en día en las cadenas de API de Windows que contiene utf -16 los datos de cadena codificados generalmente se representan utilizando una matriz de caracteres anchos, cada uno de 16 bits de longitud. A pesar de eso, las API de Windows admiten pares sustituidos de dos tipos de caracteres de 16 bits, para representar un punto de código Unicode.

Consulte this blog post para obtener información más detallada sobre el origen de la confusión.

Cuestiones relacionadas