3

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

7
  • 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. Commented Dec 11, 2012 at 19:07
  • So how do I force my java program to use this code page ? Commented Dec 11, 2012 at 19:17
  • en.wikipedia.org/wiki/List_of_Unicode_characters may be this can help you,. Commented Dec 11, 2012 at 19:32
  • I only write the characters on image, and then I work only with the image Commented Dec 11, 2012 at 20:05
  • @zdarsky.peter Add that to the question: how are the characters being written/rendered? Commented Dec 11, 2012 at 20:07

2 Answers 2

1

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

Sign up to request clarification or add additional context in comments.

1 Comment

That's probably a good solution, but make sure you encode them as Unicode points (using \U) in your source code or you may have trouble when the code is interpreted as a different character set.
0

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

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.