problema visualizzazione caratteri speciale codice ASCII

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
Andrea298

problema visualizzazione caratteri speciale codice ASCII

Messaggio da Andrea298 »

Ciao a tutti,
mi sto dilettando ad imparare programmazione C. Ho creato per esercizio un programmino molto banale con lo scopo di stampare in output il codice ASCII

Codice: Seleziona tutto

#include <stdio.h>

int main ()
{
        int i;

        printf ("il codice ASCII è : ");

        for (i=0 ; i<256 ; i++)
        {
        printf ("%c ", i);
        }

        printf ("\n");

        return 0;
}
però ottengo come output

Codice: Seleziona tutto

       	 
 
  
                     ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~  � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � � 
Come mai molti caratteri non vengono visualizzati? Ho provato a cambiare font, ma il problema non si è risolto. Cosa ho sbagliato?
Grazie in anticipo.
Avatar utente
Zoff
Moderatore Globale
Moderatore Globale
Messaggi: 33338
Iscrizione: mercoledì 10 ottobre 2007, 22:36

Re: problema visualizzazione caratteri speciale codice ASCII

Messaggio da Zoff »

Il terminale di ubuntu utilizza UTF8.
Puoi usare luit per eseguire un comando con encoding differente.
Nel tuo caso:

Codice: Seleziona tutto

luit -encoding iso88591 -- ./nomeeseguibile
Prima di aprire una discussione leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
Avatar utente
Claudio_F
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1463
Iscrizione: lunedì 28 maggio 2012, 18:49
Desktop: Mate/Gnome
Distribuzione: Ubu22.04

Re: problema visualizzazione caratteri speciale codice ASCII

Messaggio da Claudio_F »

Andrea298 ha scritto:però ottengo come output
I "caratteri ASCII" visualizzabili vanno da 32 a 126 (il 32 è lo spazio).

Dallo 0 al 31, e il 127 sono codici "di controllo" terminale, vecchie stampanti ecc (ad esempio il 13 è il return CR che in C si indica con \r, il 10 è l'avanzamento riga LF che in C si indica con \n ecc).

Oltre il 127 non sono codici ASCII.
:ciao:
Avatar utente
Zoff
Moderatore Globale
Moderatore Globale
Messaggi: 33338
Iscrizione: mercoledì 10 ottobre 2007, 22:36

Re: problema visualizzazione caratteri speciale codice ASCII

Messaggio da Zoff »

Prima di aprire una discussione leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
Avatar utente
Claudio_F
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1463
Iscrizione: lunedì 28 maggio 2012, 18:49
Desktop: Mate/Gnome
Distribuzione: Ubu22.04

Re: problema visualizzazione caratteri speciale codice ASCII

Messaggio da Claudio_F »

Ok, ma sono anche parte di tutte le codepages che hanno impestato il mondo DOS e win ante unicode, e in ogni codifica caratteri uguali possono avere codici differenti.

Secondo me se il terminale decodifica e visualizza l'UTF-8 tanto vale "pensare direttamente in UTF-8": le stringhe contengono testo codificato UTF-8, i codici da 0 a 127 coincidono con l'ASCII originale, quelli da 128 a 255 servono invece per la codifica multibyte dei caratteri non ASCII.

Codice: Seleziona tutto

#include <stdio.h>

void main(void){
    char string1[] = {'1', '5', '0', ' ', 194, 181, 'F', 0};
    char string2[] = {'1', '2', ' ', ' ', 206, 169, 0};
    printf("%s\n%s\n", string1, string2);
}
I caratteri usabili (e il relativo valore unicode espresso in esa) sono visibili in queste tabelle:
jrgraphix.net/research/unicode_blocks.php

Quello che non so come si fa in C è scoprire quale sia la codifica UTF-8 di un carattere partendo dal codice unicode (a parte fare un banale copia incolla del carattere dal browser al sorgente e farsi stampare i bytes):

Codice: Seleziona tutto

#include <stdio.h>
#include <string.h>

void main(void){
    char stringa[] = "€";
    int num_bytes = strlen(stringa);
    int i = 0;
    for (i=0; i<num_bytes; i++)
        printf("%d ", 256+stringa[i]);
    printf("\n");
}
:ciao:
Avatar utente
Zoff
Moderatore Globale
Moderatore Globale
Messaggi: 33338
Iscrizione: mercoledì 10 ottobre 2007, 22:36

Re: problema visualizzazione caratteri speciale codice ASCII

Messaggio da Zoff »

Concordo, però la richiesta, come da titolo, parla di visualizzazione di ASCII.
Prima di aprire una discussione leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: Google [Bot] e 2 ospiti