3
votes

in my app I need to get character from extended ASCII table that is shown on the image. But when I cast decimal values into char, I get different characters. What is the real value of these characters in JAVA. I dont write the character on console or in a file, just into the 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;
}

Thank you for your help, and sorry for my poor English :-)

enter image description here

2
The "extended ASCII table" is simply one mapping of "above ASCII" octect values to symbols on a terminal (or other rendering device). That is, it is just one of the many code-pages to map values of 128-255. That is, the character displayed depends on what displays it (e.g. assigned meaning and "font") and other applicable rules (e.g. codepage or "language") that it applies. - user166390
So how do I force my java program to use this code page ? - zdarsky.peter
I only write the characters on image, and then I work only with the image - zdarsky.peter
@zdarsky.peter Add that to the question: how are the characters being written/rendered? - user166390

2 Answers

1
votes

My solution for this problem is that I manualy created a char array with those characters I needed

0
votes

Put the integer values in a byte array, then you can use CharsetDecoder to convert them into a String using "Cp437".

Just a simple example:

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());