Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    [JAVA 1.7] Problemi di conversione in ascii e viceversa.

    Salve a tutti,
    ho cercato un po' su internet una funzione per convertire un carattere in ascii e viceversa e ne ho trovata una (la scrivo dopo). Allora l'ho inserita nel programma e facendolo girare un po' di volte c'era qualcosa che non tornava.. posto subito un esempio semplificato dell'errore (logico):

    codice:
    public class prova {
    
    
        public static void main (String args []){
            String a = "?";
            //carattere da convertire in ascii
            int b = 130;
            //numero in ascii da convertire in carattere
            char c = a.charAt(0);
            System.out.println("carattere convertito in ascii: "+(int)c);
            
            System.out.println("ascii convertito in carattere: "+(char)b);
            
            
        }
    }
    Se si manda in esecuzione si vedrà sulla console:

    carattere convertito in ascii: 63
    ascii convertito in carattere: ?

    Adesso il problema è che (come tutti sapete) il "?" in ascii vale 63 (e qui la conversione da carattere ad ascii funziona) ma 130 in ascii corrisponde al carattere "é" mentre il programma stampa "?" che come c'è scritto vale 63.. Come mai fa questo errore?
    Io ho postato solo questo ma se si provano altri esempi l'errore si ripete spesso.. Eppure in tanti su internet descrivono questo metodo di conversione come efficace.. Che cosa ho fatto di sbagliato??
    Conto sul vostro aiuto perché io non so più che pesci prendere..

    Vi ringrazio in anticipo x la disponibilità!
    Ultima modifica di LeleFT; 12-12-2013 a 14:04

  2. #2
    Utente di HTML.it
    Registrato dal
    Nov 2009
    Messaggi
    755
    Mmm no è un altro il problema..
    Innanzitutto l'ASCII è un sistema di codifica a 7 bit ( per una descrizione dettagliata http://it.wikipedia.org/wiki/ASCII )
    Il fatto che sia una codifica che adopera 7 bit per ogni simbolo significa che è in grado codificare 2^7=128 simboli..hai mostrato nel tuo codice come sia possibile passare da int a char e viceversa tramite dei semplici cast espliciti..e ne hai stampato i risultati
    Comunque arrivando al tuo problema,poichè stampi a video (sulla console standard che usa una codifica ASCII a 7 bit) l'inghippo sta nel fatto che una volta che tu provi a stampare il carattere ASCII relativo a un numero (decimale) maggiore di 127 (poichè saranno disponibili caratteri per 0 - 127 ) otterrai stampato a video un punto interrogativo che sta a significare che non è riconosciuto/non esiste un carattere ascii corrispondente a quel numero decimale..spero di non aver detto cacchiate e di aver reso l'idea

    come prova, esegui il codice:
    codice:
    for (int i=0;i<200;i++) {
       System.out.println (i + "\t" + (char)i);
    }
    Vedrai che i caratteri corrispondenti a i > 127 saranno tutti '?'..

    EDIT: emmm no devo correggermi poichè la console usa una codifica estesa dell'ASCII per cui troverai altri caratteri dopo il 127 ma vi sono comunque valori che codificano simboli non stampabili eccetera..

    Ultima modifica di zipangulu; 11-12-2013 a 18:30

  3. #3
    aaaaaah ok ho capito benissimo, grazie mille!
    Io pensavo che i caratteri ascii normali fossero compresi tra 0 e 255, quindi se considero i caratteri fino a 127 teoricamente non ci dovrebbero essere errori e i caratteri corrispondere..

    Troppo gentile, non smetterò mai di ringraziarti

  4. #4
    Utente di HTML.it
    Registrato dal
    Nov 2009
    Messaggi
    755
    Emmm leggi l'edit del precedente post..inoltre prendi con pinze quanto ti ho detto poichè a dir la verità non so con precisione che codifica adopera la console, quindi quanto detto prima può esser valido fino a un certo punto..arriverà a breve la risposta di qualcuno del forum più informato e preparato di me che ti chiarirà le idee


  5. #5
    beh si quello l'ho visto che andando avanti dopo un certo valore incontro le lettere accentate.. Perché x me e importante avere un elenco di ascii che corrispondono tutti ad un carattere, fino a 127 lo hanno tutti ma dopo (come mi hai fatto notare) si ripete x un po' il carattere "?" e poi ne iniziano altri..
    Però se io uso la funzione alt+numero in ascii (da tastnum) da usare nel notepad di windows fino a 255 x ogni numero in ascii mi ritorna un carattere ben definito e diverso dagli altri.. Perché questo non funziona anche in java??

    Comunque grazie zipangulu x l'interessamento

    Aspetto risposte di qualcuno che sappia illuminarmi

  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    1,123
    Ti viene mostrato da Java in quanto non può convertirlo in UTF-8.
    Dai un occhio a questa risposta, se questa sera ho tempo ti rispondo meglio http://stackoverflow.com/questions/3...acter-encoding

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.