2011-01-09 156 views
7

que estaba usando XVI32 (Hex Editor) para obtener la representación hexadecimal del símbolo del Euro y me da el valor como 80.
Otro sitio: http://www.string-functions.com/string-hex.aspx hace lo mismo.
No puedo entender por qué la representación hexadecimal es 80 en lugar de 0x20AC. Este 0X80 da 128 en decimal y si uso Alt + 0128 en realidad produce el símbolo del euro.representación hexadecimal del símbolo del Euro €

¿Podría alguien arrojar algo de luz sobre cuál podría ser la lógica detrás de esta conversión de conversión de cadena a hexadecimal?

Gracias

Respuesta

2

128 en decimal es 80 en hexadecimal.

editar: y 0x20AC sería 8364 en decimal.


Según this página 128 es incorrecta para UTF-8 (Unicode o cualquier otro), pero justo para Windows-1252 (e iso-8859-15 también lo tiene, aunque en otros lugares).

Normalmente, si utiliza, en Windows, una tecla del teclado etiquetada con el símbolo del euro, el octeto bruto 128 es lo que realmente produce e inserta en un archivo .... Tal método es formalmente correcto si el el documento se acompaña con información que especifica una codificación donde los datos se asignan al personaje en cuestión. Esto significaría, respectivamente, la codificación windows-1252 o iso-8859-15, que debería especificarse en los encabezados HTTP.

+1

ISO-8859-15 tiene '€', pero al 0xA4, no 0x80. – dan04

+0

@ dan04 - gracias por la corrección. – Oded

7

Una codificación de caracteres (o juego de caracteres) asigna caracteres a una secuencia de valores de bytes. Su juego de caracteres es windows-1252, que codifica el símbolo del euro como el byte hexadecimal único 0x80 (que es 128 en decimal, como dice Oded). Cada juego de caracteres codifica caracteres no ASCII de manera diferente; no hay nada fundamentalmente "correcto" o "incorrecto" sobre ese 0x80.

+0

Puede que no sea "incorrecto", pero sería mucho más fácil * si no tuviéramos que lidiar con estas codificaciones de caracteres heredadas. – dan04

+0

De alguna manera sí, de alguna manera no. Es más fácil tener caracteres de ancho constante, lo que le da a los conjuntos de caracteres "heredados" como windows-1252 una ventaja sobre los más modernos y versátiles como UTF-8. E incluso entre los conjuntos de caracteres estándar que codifican directamente los puntos de código Unicode (UTF-8, UTF-16BE, UTF-16LE, UCS-4, etc.), cada uno da como resultado una secuencia de bytes diferente para cada carácter ... http://en.wikipedia.org/wiki/Comparison_of_Unicode_encodings – dkarp

+0

¡¡¡Solo me salvas !! Gracias ! – Superdrac

0

Supongo que en su máquina (y en ese sitio), la página de códigos locales es tal que el código 128 se asigna al símbolo del euro. En mi máquina, Alt + 0128 se asigna al carácter hebreo Alef, porque está configurado en una página de códigos diferente.

se puede ver el código Unicode para Euro escribiendo

javascript:alert("€".charCodeAt(0)) 

en la barra de direcciones del navegador.

1

La razón por la que vea resultados diferentes es la codificación de caracteres:

El número 0x20AC es el punto de código Unicode para el símbolo del euro. Dependiendo de la codificación utilizada, obtienes varios códigos. En Windows, normalmente tiene algo así como cp1252 o más para alemán, por ejemplo, que es bastante similar a la codificación ISO8859-1 y que contiene el símbolo del euro a 0x80.

Entonces, qué código hexadecimal obtienes para el símbolo del euro depende de la codificación utilizada en los datos que miras. Puede echar un vistazo a las Unicode.org proporcionado archivos de codificación para ver algunas de las diversas codificaciones disponibles, echar un vistazo a las asignaciones disponibles aquí: http://unicode.org/Public/MAPPINGS/

0

0x20AC debe ser la correcta desde el símbolo del euro es (extendido) carácter unicode
El hecho de que al presionar Alt + 0128 produce el símbolo del euro no tiene nada que ver con esto (que probablemente lo está haciendo en las ventanas? Es ventanas cosa específica a continuación) 0x80 ó 128 no es un código HTML válido (El comportamiento no está definido) : http://www.ascii.cl/htmlcodes.htm
Leer más en: http://www.cs.tut.fi/~jkorpela/html/euro.html

2

Unicode llegaron muy tarde en la imagen para la codificación de caracteres (alrededor de 1992-1993). Antes, ese OEM usaba su codificación específica. En el entorno de Windows tiene mucha codificación, específica de una configuración regional. Por lo tanto, según la codificación de Ventana de Windows: Western, obtienes 0x80 por euro. Sin embargo, Unicode cubrió todos los símbolos de moneda en los Bloques de Símbolo de Moneda de BMP (U + 20A0 a U + 20CF). Por lo tanto, según Unicode, tiene U + 20AC para el símbolo de moneda del euro y según la codificación de Windows, tiene 0x80 para el mismo.

para ver la diferencia, en una máquina de las ventanas abiertas charmap.exe y comprobar vista avanzada. De los conjuntos de caracteres, seleccione Windows: occidental. Ahí verás la razón.

Para obtener más información, ver https://en.wikipedia.org/wiki/Windows-1252

Cuestiones relacionadas