Foro de elhacker.net

Programación => Java => Mensaje iniciado por: Seyro97 en 17 Marzo 2015, 16:01 pm



Título: (Ayuda) Inconcluencias entre código ASCII y UNICODE
Publicado por: Seyro97 en 17 Marzo 2015, 16:01 pm
Hola, muy buenas. En primer lugar, a partir de ahora se supondrá que uso Java.

Estaba haciendo un ejercicio que decía así:

  • Lee un número por teclado y muestra por consola, el carácter al que pertenece en la tabla ASCII. Por ejemplo: si introduzco un 97, me muestre una a.
  • Modifica el ejercicio anterior, para que en lugar de pedir un número, pida un carácter (char) y muestre su código en la tabla ASCII.

Bien. He hecho el programa y todo va bien, pero con un problema. Cuando paso, por ejemplo, el carácter 'á' a número me da como resultado 160, el que le corresponde en ASCII. El problema es que a la hora de mostrar dicho carácter por pantalla se convierte a  UTF-8 (he hecho varias pruebas, y confirmo lo que digo.). Sabiendo que la consola trabaja con el código ASCII (Windows), y que el valor numérico de dicho carácter corresponde al código ASCII, ¿Por qué se muestra como UTF-8?

El código:

Código
  1. import java.util.Scanner;
  2.  
  3. public class Main {
  4. public static void main(String[] args) {
  5. Scanner Reader = new Scanner(System.in);
  6. char Character = ' ';
  7.  
  8. System.out.print("Introduzca un caracter cualquiera: ");
  9. Character = Reader.next().charAt(0);
  10.  
  11. System.out.println("El valor numérico de " + Character + " es " + ((int)Character));
  12. }
  13. }


MUCHAS GRACIAS POR ATENDERME


Título: Re: (Ayuda) Inconcluencias entre código ASCII y UNICODE
Publicado por: Usuario Invitado en 17 Marzo 2015, 17:58 pm
Tendrías que crear un array con todos los caracteres extendidos. Ejemplo:

Código
  1. import java.util.Scanner;
  2.  
  3. public class Main {
  4.    public static final char[] EXTENDED = { 0x00C7, 0x00FC, 0x00E9, 0x00E2,
  5.            0x00E4, 0x00E0, 0x00E5, 0x00E7, 0x00EA, 0x00EB, 0x00E8, 0x00EF,
  6.            0x00EE, 0x00EC, 0x00C4, 0x00C5, 0x00C9, 0x00E6, 0x00C6, 0x00F4,
  7.            0x00F6, 0x00F2, 0x00FB, 0x00F9, 0x00FF, 0x00D6, 0x00DC, 0x00A2,
  8.            0x00A3, 0x00A5, 0x20A7, 0x0192, 0x00E1, 0x00ED, 0x00F3, 0x00FA,
  9.            0x00F1, 0x00D1, 0x00AA, 0x00BA, 0x00BF, 0x2310, 0x00AC, 0x00BD,
  10.            0x00BC, 0x00A1, 0x00AB, 0x00BB, 0x2591, 0x2592, 0x2593, 0x2502,
  11.            0x2524, 0x2561, 0x2562, 0x2556, 0x2555, 0x2563, 0x2551, 0x2557,
  12.            0x255D, 0x255C, 0x255B, 0x2510, 0x2514, 0x2534, 0x252C, 0x251C,
  13.            0x2500, 0x253C, 0x255E, 0x255F, 0x255A, 0x2554, 0x2569, 0x2566,
  14.            0x2560, 0x2550, 0x256C, 0x2567, 0x2568, 0x2564, 0x2565, 0x2559,
  15.            0x2558, 0x2552, 0x2553, 0x256B, 0x256A, 0x2518, 0x250C, 0x2588,
  16.            0x2584, 0x258C, 0x2590, 0x2580, 0x03B1, 0x00DF, 0x0393, 0x03C0,
  17.            0x03A3, 0x03C3, 0x00B5, 0x03C4, 0x03A6, 0x0398, 0x03A9, 0x03B4,
  18.            0x221E, 0x03C6, 0x03B5, 0x2229, 0x2261, 0x00B1, 0x2265, 0x2264,
  19.            0x2320, 0x2321, 0x00F7, 0x2248, 0x00B0, 0x2219, 0x00B7, 0x221A,
  20.            0x207F, 0x00B2, 0x25A0, 0x00A0 };
  21.  
  22.    public static final char getAsciiCharacter(int code) {
  23.        if (code >= 0x80 && code <= 0xFF) {
  24.            return EXTENDED[code - 0x7F];
  25.        }
  26.        return (char) code;
  27.    }
  28.  
  29.    public static final int getAsciiCode(char character) {
  30.        int code = (int) character;
  31.        for(short i=0; i < EXTENDED.length; i++) {
  32.            if(EXTENDED[i] == character)
  33.                code = 128 + i;
  34.        }
  35.        return code;
  36.    }
  37.  
  38.    public static final void printCharacter(int code) {
  39.        System.out.printf("%c%n", getAsciiCharacter(code));
  40.    }
  41.  
  42.    public static void main(String[] args) {
  43.        Scanner reader = new Scanner(System.in);
  44.  
  45.        System.out.print("Ingrese un carácter: ");
  46.        char character = reader.next().charAt(0);
  47.  
  48.        int asciiCode = getAsciiCode(character);
  49.  
  50.        System.out.println("El carácter es "+ character +" y su código ascii es: " + asciiCode);
  51.    }
  52.  
  53.  
  54. }


Título: Re: (Ayuda) Inconcluencias entre código ASCII y UNICODE
Publicado por: Seyro97 en 17 Marzo 2015, 18:54 pm
Eso es muy largo para un ejercicio :P


Título: Re: (Ayuda) Inconcluencias entre código ASCII y UNICODE
Publicado por: Usuario Invitado en 17 Marzo 2015, 18:56 pm
¿Muy largo? Jaja, en el mundo real esto es "muy pequeño". Pero es normal que se piense así cuando recién se está aprendiendo. Si no entendiste algo, házmelo saber para explicarte.


Título: Re: (Ayuda) Inconcluencias entre código ASCII y UNICODE
Publicado por: Seyro97 en 17 Marzo 2015, 19:05 pm
No,muchas gracias :D Si que se que esto es corto, porque vengo de C++, pero pienso que para un ejercicio básico es muy largo


Título: Re: (Ayuda) Inconcluencias entre código ASCII y UNICODE
Publicado por: Usuario Invitado en 17 Marzo 2015, 19:13 pm
Pero esto no vendría a ser el ejercicio en si. Puede usarse como una clase utilitaria incluso la puedes exportar como JAR y en algún otro proyecto, solo importas el JAR y haces uso de la clase sin necesidad de volver a crearla. Así nacen las librerías  ;)


Título: Re: (Ayuda) Inconcluencias entre código ASCII y UNICODE
Publicado por: Seyro97 en 17 Marzo 2015, 19:19 pm
Vale. Muchas gracias!


Título: Re: (Ayuda) Inconcluencias entre código ASCII y UNICODE
Publicado por: palsot en 25 Febrero 2019, 02:43 am
Hola!! me podrias ayudar por favor!! tu codigo me vino muy pero muy bien, solo una duda, porque no se imprimen los caracteres del 1 al 31? cuando me pide ingresar un caracter y pongo alguno que este en este intervalo me muestra un signo de interrogacion (?) y me pone que su codigo ascci es 63, del caracter 176 al 188 me pasa exactamente lo mismo y de ahi en adelante bueno.. algunos caracteres me arroja resultados correctos, otros no... pasaron años jaja pero agradeceria enormemente si pudoeras ayudarme.
gracias!!