Premessa1: grazie per la pazienza
Premessa2: ho fatto dei test su una distro live linux ed effettivamente ho notato che : digitando una 'è'
Risultato: 1. con la versione NON incapsulata -->mi viene stampato un carattere NON corretto , nello specifico una 'A' (col tilde)
risultato che mi aspettavo perché ho LETTO solo il 1°byte dei 2 che mi sarebbero serviti per rappresentare effettivamente il carattere
2. con la versione incapsulata --> effettivamente mi viene stampato il carattere corretto 'è',
perché <<internamente,mi verrà automaticamente chiamato il metodo() per la lettura di 1byte
""il numero di volte che mi serve affinché quel carattere sia effettivamente letto "">>
Da stackoverflow ho letto che:
-in generale: quando pigiamo un tasto sulla tastiera , viene inviato un codice che sostanzialmente comunica quel è il tasto pigiato come se fosse "un elemento di una matrice" . Cosa riceve l'Applicazione invece dipende dalla convenzione adottata dal Sistema Operativo , nello specifico:
-in Windows: dipende da come i CARATTERI sono codificati dal "code page" della console (che possiamo visualizzare dando il comando: chcp , nel mio caso 850)
-in Linux: le Applicazioni solitamente utilizzano la codifica UTF-8
A console application on Windows with chcp 1250 will get one byte '\xE3' (227 decimal).
A console application on Windows with chcp 852 will get one byte '\xC7' (199 decimal).
A graphical application on Windows will get a suitable key symbol, which usually will get stored/processed as two bytes '\x03' '\x01' (or as the short integer 0x103).
A terminal application on Linux will get two bytes '\xC4' '\x83' (<U+0103> in UTF-8 encoding).
A graphical application on Linux will get a suitable key symbol, which usually will get stored/processed as two bytes '\xC4' '\x83' (<U+0103> in UTF-8 encoding).
Windows-1252 è un charset single-byte (sempre e solo 1 byte x carattere)
Da Prompt comandi (windows-1252) inserendo una "è" viene generato solo un byte codice 138 che però NON è relativo al Windows-1252.
Ma è relativo al "code page" del prompt di comandi.
Il problema è che Java lo legge "sapendo" del Windows-1252 quindi "mappa" il carattere sbagliato
Nello specifico: 1.la pressione di 'è' da Prompt --> genera il codice 138 in base al Code Page(a questo set di caratteri "proprio" del prompt di comandi),
2.dopodiché, java va a cercare il carattere corrispondente a quel codice 138 in quello che "lui" si aspetta sia il set di caratteri Windows ovvero il windows-1252 --> e dunque lì trova il carattere"Š"
3. al momento della stampa (a video) , però il carattere dev'essere visualizzato "sul prompt" , dunque dobbiamo far di nuovo riferimento al Charset dettato dal Code Page --> tuttavia lì quel carattere non esiste e dunque mi stampa un '?'
Spero che la spiegazione non ti abbia confuso .
Sei stato cristallino!
Questa purtroppo è una grana dei Windows. L'unico modo buono per risolverla è usare la classe java.io.Console che esiste da Java 6 e ha maggiore nozione appunto della console (anche e soprattutto su Windows).
Credo che per evitare di avere dubbi dettati "esclusivamente" da Windows e non dalla teoria del linguaggio , mi converrà fare test anche su Linux.