【问题标题】:JAVA extended ASCII table usageJAVA 扩展 ASCII 表用法
【发布时间】:2012-11-29 09:23:11
【问题描述】:

在我的应用程序中,我需要从图像上显示的扩展 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;
}

感谢您的帮助,也很抱歉我的英语不好:-)

【问题讨论】:

  • “扩展 ASCII 表”只是“高于 ASCII”八位字节值到终端(或其他渲染设备)上的符号的一种映射。也就是说,它只是众多code-pages 中的一个,用于映射128-255 的值。也就是说,显示的字符取决于 什么 显示它(例如指定的含义和“字体”)以及它应用的其他适用规则(例如代码页或“语言”)。
  • 那么我如何强制我的java程序使用这个代码页?
  • 我只在图像上写字符,然后我只处理图像
  • @zdarsky.peter 将其添加到问题中: 字符是如何被写入/渲染的?

标签: java casting char ascii


【解决方案1】:

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

【讨论】:

  • 这可能是一个很好的解决方案,但请确保在源代码中将它们编码为 Unicode 点(使用 \U),否则当代码被解释为不同的字符集时可能会遇到问题。跨度>
【解决方案2】:

将整数值放入字节数组中,然后您可以使用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());

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-24
    • 2011-07-31
    • 2014-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多