2011-01-09 68 views
7

Stavo usando XVI32 (Hex Editor) per ottenere la rappresentazione esadecimale del simbolo dell'euro e mi dà il valore di 80.
Un altro sito: http://www.string-functions.com/string-hex.aspx fa lo stesso.
Non riesco a capire perché la rappresentazione esadecimale sia 80 anziché 0x20AC. Questo 0X80 dà 128 in decimale e se uso Alt + 0128 produce effettivamente il simbolo dell'euro.Rappresentazione esadecimale del simbolo dell'euro €

Qualcuno potrebbe far luce su quale potrebbe essere la logica dietro questa conversione da stringa a conversione esadecimale?

Grazie

risposta

2

128 in decimale è di 80 in esadecimale.

modifica: e 0x20AC sarebbe 8364 in decimale.


Secondo this pagina 128 è errato per UTF-8 (o qualsiasi altro unicode), ma giusto per windows-1252 (e iso-8859-15 ha anche, però altrove).

In genere, se si utilizza, su Windows, un tasto della tastiera etichettato con il simbolo dell'euro, l'ottetto grezzo 128 è ciò che effettivamente si produce e si inserisce in un file .... Tale metodo è formalmente corretto se il il documento è accompagnato da informazioni che specificano una codifica in cui i dati sono mappati al personaggio in questione. Ciò significherebbe, rispettivamente, la codifica windows-1252 o iso-8859-15, che dovrebbe essere specificata nelle intestazioni HTTP.

+1

ISO-8859-15 ha '€', ma a 0xA4, non 0x80. – dan04

+0

@ dan04 - grazie per la correzione. – Oded

7

Una codifica di caratteri (o set di caratteri) mappa i caratteri in una sequenza di valori di byte. Il set di caratteri è windows-1252, che codifica il simbolo dell'euro come byte singolo esadecimale 0x80 (che è 128 in decimale, come dice Oded). Ogni set di caratteri codifica i caratteri non ASCII differentemente; non c'è nulla di fondamentalmente "giusto" o "sbagliato" su quel 0x80.

+0

Potrebbe non essere "sbagliato", ma sarebbe molto più facile * se non dovessimo occuparci di queste codifiche di carattere legacy. – dan04

+0

In qualche modo sì, in qualche modo no. È più semplice avere caratteri a larghezza costante, il che dà set di caratteri "legacy" come windows-1252 a quelli più versatili e "moderni" come UTF-8. E anche tra i set di caratteri standard che codificano direttamente i punti di codice Unicode (UTF-8, UTF-16BE, UTF-16LE, UCS-4, ecc.), Ognuno produce una sequenza di byte diversa per ogni carattere ... http://en.wikipedia.org/wiki/Comparison_of_Unicode_encodings – dkarp

+0

Mi hai appena salvato !! Grazie ! – Superdrac

0

Immagino che nella vostra macchina (e su quel sito), la code page locale sia tale che il codice 128 sia mappato al simbolo dell'euro. Sulla mia macchina Alt + 0128 si associa al carattere ebraico Alef, perché è impostato su una diversa tabella codici.

si può vedere il codice Unicode per Euro digitando

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

nella barra degli indirizzi del browser.

1

La ragione di vedere i risultati differenti è codifiche dei caratteri:

Il numero 0x20AC è il codepoint Unicode per il simbolo dell'euro. A seconda della codifica utilizzata si ottengono vari codici. In Windows, ad esempio, in genere c'è qualcosa di simile a cp1252 per tedesco, che è molto simile alla codifica ISO8859-1 e che contiene il simbolo dell'euro a 0x80.

Quindi quale codice esadecimale si ottiene per il simbolo dell'euro dipende dalla codifica utilizzata nei dati che si guardano. Si può avere uno sguardo ai file di codifica Unicode.org fornito per vedere alcune delle varie codifiche disponibili, date un'occhiata alle mappature disponibili qui: http://unicode.org/Public/MAPPINGS/

0

0x20AC dovrebbe essere quella giusta in quanto simbolo di euro è (esteso) carattere unicode.
Il fatto che premere Alt + 0128 produca il simbolo dell'euro non ha nulla a che fare con questo (lo stai probabilmente facendo in Windows? È quindi cosa specifica di Windows) 0x80 o 128 non è un codice html valido (Il comportamento non è definito) : http://www.ascii.cl/htmlcodes.htm
saperne di più su: http://www.cs.tut.fi/~jkorpela/html/euro.html

2

Unicode è venuto molto tardi nella foto per la codifica dei caratteri (circa 1992-1993). Prima che l'OEM usasse la sua specifica codifica. Nell'ambiente Windows hai molte codifiche, specifiche per una locale. Pertanto, come per la codifica Window di Windows: Western, si ottiene 0x80 per euro. Tuttavia Unicode ha coperto tutti i simboli di valuta nei blocchi simbolo di valuta di BMP (da U + 20A0 a U + 20CF). Pertanto, come per Unicode, hai U + 20AC per il simbolo dell'euro e, come per la codifica Windows, hai 0x80 per lo stesso.

Per vedere la differenza, su una macchina Windows aprire charmap.exe e controllare la visualizzazione avanzata. Dai set di caratteri, selezionare Windows: Western. Lì vedrai il motivo.

Per ulteriori informazioni, vedere https://en.wikipedia.org/wiki/Windows-1252

Problemi correlati