Utilisation étendue de la table ASCII JAVA


Dans mon application, j'ai besoin d'obtenir un caractère de la table ASCII étendue qui est affichée sur l'image. Mais lorsque je lance des valeurs décimales dans char, j'obtiens des caractères différents. Quelle est la valeur réelle de ces caractères en JAVA. Je n'écris pas le caractère sur la console ou dans un fichier, juste dans l'image.

private void generateAsciiMatrix()
{
    //32 - 255 are visible characters in ascii table
    for(int i = 32; i < 256; i++)
    {
        this.generateAsciiMatrix((char)i);
    }
}

private void generateAsciiMatrix(char letter)
{
    EBufferedImage character = new EBufferedImage(
            ImageClass.charToImage(letter, width, height));
    //...some code
}

public static BufferedImage charToImage(char c, int width, int height)
{
    BufferedImage off_Image = new BufferedImage(width, height,
                BufferedImage.TYPE_BYTE_GRAY);

    Graphics2D g2 = off_Image.createGraphics();
    g2.setColor(Color.black);
    g2.setBackground(Color.WHITE);  
    g2.clearRect(0, 0, width, height);  
    g2.setFont(new Font("Monospaced", Font.PLAIN, 12)); 
    g2.drawString(Character.toString(c), 0, height);
    saveImage(off_Image, "code" + (int)c);
    return off_Image;
}

Merci pour votre aide, et désolé pour mon mauvais anglais :-)

entrez la description de l'image ici

Author: zdarsky.peter, 2012-12-11

2 answers

Ma solution à ce problème est que j'ai créé manuellement un tableau de caractères avec les caractères dont j'avais besoin

 1
Author: zdarsky.peter, 2012-12-12 00:35:23

Mettez les valeurs entières dans un tableau d'octets, puis vous pouvez utiliser CharsetDecoder pour les convertir en chaîne en utilisant "Cp437".

Juste un exemple simple:

Charset oem = Charset.forName("Cp437");
ByteBuffer b = ByteBuffer.allocate(0xFF - 0x20 - 1);
for (int i = 0x20; i < 0xFF; i++) {
    if (i == 0x7F) {
        // skip DEL
        continue;
    }

    b.put((byte) i);
}
b.flip();
CharBuffer c = oem.decode(b);
System.out.println(c.toString());
 0
Author: Maarten Bodewes, 2012-12-12 01:20:12