O símbolo do euro € é sobejamente conhecido mas levanta enormes dores de cabeça quando é necessário transferir a sua representação entre aplicações ou dentro da mesma aplicação quando a representação é guardada num conjuntos de bytes, por exemplo, um ficheiro ou array.
A linguagem JAVA considera todos os caracteres de uma string como pertencendo ao úniverso de codepoints (numa forma simplista um codepoint corresponde a um caracter do código ASCII) da especificação Unicode. No Unicode o símbolo € está atribuído ao codepoint 20AChex que ultrapassa em muito os 255 valores da tabela ASCII ou da tabela que actualmente é mais usada no nosso país o ISO-8859-1. Na prática a tabela ISO-8859-1 corresponde aos primeiros 255 simbolos da Unicode, por isso, se o universo de caracteres usados por uma aplicação corresponder apenas aos símbolos do ISO-8859-1 pode-se representar cada caracter de uma String num único byte. Iste estratagema serve para o os caracteres acentuados, por exemplo, mas não para o símbolo do euro, que não faz parte do alfabeto do ISO-8859-1

Portanto, quando for necessário gravar uma String contento o símbolo do Euro num conjunto de bytes, deve-se codificar os caracteres usando os métodos oficiais do Unicode: UTF-8, UTF-16, UTF-32 ou recorrendo a alfabetos que contenham os caracteres normal do alfabeto português e o símbolo do euro. Os alfabetos candidatos são: ISO-8859-15 onde o símbolo do euro tem o valor de A4hex (O ISO-8859-15 é uma actualização do ISO-8859-1 onde uns quantos caracteres menos usados foram substituídos por outros que faziam falta como por exemplo o €) ou o CP1252 do windows onde o euro ocupa o lugar de 80hex.
| Windows-1252 (CP1252) | ||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| x0 | x1 | x2 | x3 | x4 | x5 | x6 | x7 | x8 | x9 | xA | xB | xC | xD | xE | xF | |
| 0x | NUL 0 |
SOH 1 |
STX 2 |
ETX 3 |
EOT 4 |
ENQ 5 |
ACK 6 |
BEL 7 |
BS 8 |
TAB 9 |
LF 10 |
VT 11 |
FF 12 |
CR 13 |
SO 14 |
SI 15 |
| 1x | DLE 16 |
DC1 17 |
DC2 18 |
DC3 19 |
DC4 20 |
NAK 21 |
SYN 22 |
ETB 23 |
CAN 24 |
EM 25 |
SUB 26 |
ESC 27 |
FS 28 |
GS 29 |
RS 30 |
US 31 |
| 2x | SP 32 |
! 33 |
“ 34 |
# 35 |
$ 36 |
% 37 |
& 38 |
‘ 39 |
( 40 |
) 41 |
* 42 |
+ 43 |
, 44 |
- 45 |
. 46 |
/ 47 |
| 3x | 0 48 |
1 49 |
2 50 |
3 51 |
4 52 |
5 53 |
6 54 |
7 55 |
8 56 |
9 57 |
: 58 |
; 59 |
< 60 |
= 61 |
> 62 |
? 63 |
| 4x | @ 64 |
A 65 |
B 66 |
C 67 |
D 68 |
E 69 |
F 70 |
G 71 |
H 72 |
I 73 |
J 74 |
K 75 |
L 76 |
M 77 |
N 78 |
O 79 |
| 5x | P 80 |
Q 81 |
R 82 |
S 83 |
T 84 |
U 85 |
V 86 |
W 87 |
X 88 |
Y 89 |
Z 90 |
[ 91 |
\ 92 |
] 93 |
^ 94 |
_ 95 |
| 6x | ` 96 |
a 97 |
b 98 |
c 99 |
d 100 |
e 101 |
f 102 |
g 103 |
h 104 |
i 105 |
j 106 |
k 107 |
l 108 |
m 109 |
n 110 |
o 111 |
| 7x | p 112 |
q 113 |
r 114 |
s 115 |
t 116 |
u 117 |
v 118 |
w 119 |
x 120 |
y 121 |
z 122 |
{ 123 |
| 124 |
} 125 |
~ 126 |
DEL 127 |
| Ax | NBSP 160 |
¡ 161 |
¢ 162 |
£ 163 |
¤ 164 |
¥ 165 |
¦ 166 |
§ 167 |
¨ 168 |
© 169 |
ª 170 |
« 171 |
¬ 172 |
SHY 173 |
® 174 |
¯ 175 |
| Bx | ° 176 |
± 177 |
² 178 |
³ 179 |
´ 180 |
µ 181 |
¶ 182 |
· 183 |
¸ 184 |
¹ 185 |
º 186 |
» 187 |
¼ 188 |
½ 189 |
¾ 190 |
¿ 191 |
| Cx | À 192 |
Á 193 |
 194 |
à 195 |
Ä 196 |
Å 197 |
Æ 198 |
Ç 199 |
È 200 |
É 201 |
Ê 202 |
Ë 203 |
Ì 204 |
Í 205 |
Î 206 |
Ï 207 |
| Dx | Ð 208 |
Ñ 209 |
Ò 210 |
Ó 211 |
Ô 212 |
Õ 213 |
Ö 214 |
× 215 |
Ø 216 |
Ù 217 |
Ú 218 |
Û 219 |
Ü 220 |
Ý 221 |
Þ 222 |
ß 223 |
| Ex | à 224 |
á 225 |
â 226 |
ã 227 |
ä 228 |
å 229 |
æ 230 |
ç 231 |
è 232 |
é 233 |
ê 234 |
ë 235 |
ì 236 |
í 237 |
î 238 |
ï 239 |
| Fx | ð 240 |
ñ 241 |
ò 242 |
ó 243 |
ô 244 |
õ 245 |
ö 246 |
÷ 247 |
ø 248 |
ù 249 |
ú 250 |
û 251 |
ü 252 |
ý 253 |
þ 254 |
ÿ 255 |
Tabela do CP1252 (ver original)
Resumindo, o valor de char c = ‘€’ terá o valor de 20AChex no alfabeto do Unicode, nenhum valor em ISO-8859-1 (o java nesta codificação representa-o por um ponto de interrogação ?), A4hex no alfabeto ISO-8859-15 e 80hex no alfabeto CP1252 do windows.
Julho 15, 2008 at 5:56 pm
Então quer dizer…. naum existe nenhum código ASC para a simbologia do “Euro” ‘€’?
Quer dizer que estou num mato sem €…
Se puder me dar uma mão!!!
Julho 16, 2008 at 8:58 pm
Quando a tabela ASCII foi definida o Euro não existia. Em java uma das soluções é codificar o texto através de ISO-8859-15. É possível que exista outras codificações que tambem tenham o simbolo do euro como o CP1252
Julho 18, 2008 at 5:52 pm
tem um jeito sim alt+0128
Julho 19, 2008 at 5:19 pm
A sequência de teclas alt+0128 ao windows origina o simbolo do euro, porque 128 em decimal é igual a 80 hex que corresponde ao símbolo do euro na tabela de código da microsoft CP1252, que é aquela usada por omissão pelo windows.
Penso que continua a ser verdade que o simbolo euro não existe na tabela ASCII mas como está no artigo existe em outras tabelas de código, como por exemplo o CP1252.