2012-01-04 32 views
6

¿Por qué el símbolo de Grado difiere de UTF-8 del Unicode?¿Por qué el símbolo de Grado difiere de UTF-8 del Unicode?

De acuerdo a: http://www.utf8-chartable.de/ y http://www.fileformat.info/info/unicode/char/b0/index.htm

Unicode es B0 pero UTF-8 es C2 B0 ¿Cómo puede ser ??

+0

Hay miles de caracteres cuya representación difiere entre UTF-8 y UTF-16. ¿Qué te hace creer que el símbolo de grado merece un trato especial? –

+5

Necesita comprender la diferencia entre Unicode y sus diversas codificaciones. Lea los enlaces que la gente ha publicado. – tripleee

+0

@MikeNakis: Creo que * todos * los puntos de código Unicode tienen representaciones diferentes en UTF-8 y UTF-16. –

Respuesta

15

UTF-8 es una forma de codificar caracteres UTF utilizando un número variable de bytes (el número de bytes depende del punto del código).

puntos de código entre U + 0080 y U + 07FF utilizan la siguiente 2-byte encoding:

110xxxxx 10xxxxxx 

donde x representan los bits de la punto de código se codifica.

Consideremos U + 00B0. En binario, 0xB0 es 10110000. Si uno sustituye los bits en la plantilla anterior, se obtiene:

11000010 10110000 

en hexadecimal, esto es 0xC2 0xB0.

+1

Y, lo que es crucial, es simplemente una representación diferente del mismo punto de código Unicode, U + 00B0. UTF-16 usa 0x00 0xB0 (big-endian) o 0xB0 0x00 (little-endian), pero UTF-8 usa 0xC2 0xB0 (sin endian-ness). –

+0

El enlace que proporcione es muy útil ... Gracias –

+0

@JonathanLeffler "No endian-ness" No es la terminología adecuada pero graciosa –

4

Unicode (UTF-16 y UTF-32) utiliza el punto de código 0x00B0 para ese carácter. UTF-8 no permite caracteres en valores superiores a 127 (0x007F), ya que el bit alto de cada byte está reservado para indicar que este carácter particular es en realidad uno de varios bytes.

La ASCII básica de 7 bits se correlaciona directamente con los primeros 128 caracteres de UTF-8. Cualquier carácter cuyos valores estén por encima de 127 decimal (7F hex) debe "escaparse" configurando el bit alto y agregando 1 o más bytes adicionales para describir.

4

UTF-8 es una codificación de Unicode. UTF-16 y UTF-32 son otras codificaciones de Unicode.

Unicode define un valor numérico para cada carácter; el símbolo de grado pasa a ser 0xB0, o 176 en decimal. Unicode no define cómo se representan esos valores numéricos.

UTF-8 codifica el valor 0xB0 como dos octetos consecutivos (bytes) con los valores 0xC2 0xB0.

UTF-16 codifica el mismo valor como 0x00 0xB0 o como 0xBo 0x00, según endianness.

UTF-32 lo codifica como 0x00 0x00 0x00 0xB0 o como 0xB0 0x00 0x00 0x00, de nuevo dependiendo del endianness (supongo que es posible hacer otros pedidos).

1

Las respuestas de NPE, Marc y Keith son buenas y están por encima de mi conocimiento sobre este tema. Aún así tuve que leerlos un par de veces antes de darme cuenta de qué se trataba. Luego vi esta página web que hizo que "haga clic" para mí.

En http://www.utf8-chartable.de/, se puede ver lo siguiente:

UTF-8 needs C2 80 to represent U+0080

Aviso cómo es necesario el uso de dos bytes para codificar un carácter. Ahora lea la respuesta aceptada de NPE.

+0

Si un usuario no puede ver el sitio web, muestra '0x7F' (BORRAR) como UTF-8: '7F', y' 0x80' como UTF-8: 'C2 80' –

Cuestiones relacionadas