3

在我的应用程序中,我需要从图像上显示的扩展 ASCII 表中获取字符。但是当我将十进制值转换为 char 时,我会得到不同的字符。这些字符在 JAVA 中的真正价值是什么。我不在控制台或文件中写入字符,只是写入图像。

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;
}

感谢您的帮助,并为我糟糕的英语感到抱歉:-)

在此处输入图像描述

4

2 回答 2

1

我对这个问题的解决方案是我用我需要的那些字符手动创建了一个 char 数组

于 2012-12-12T00:35:23.170 回答
0

将整数值放入字节数组中,然后您可以使用CharsetDecoder. 将它们转换为字符串"Cp437"

只是一个简单的例子:

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());
于 2012-12-12T01:08:56.757 回答