java JAVA扩展ASCII表用法
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/13826781/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
JAVA extended ASCII table usage
提问by zdarsky.peter
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.
在我的应用程序中,我需要从图像上显示的扩展 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;
}
Thank you for your help, and sorry for my poor English :-)
谢谢你的帮助,对不起我的英语不好:-)
采纳答案by zdarsky.peter
My solution for this problem is that I manualy created a char array with those characters I needed
我对这个问题的解决方案是我手动创建了一个包含我需要的字符的字符数组
回答by Maarten Bodewes
Put the integer values in a byte array, then you can use CharsetDecoder
to convert them into a String using "Cp437"
.
将整数值放在一个字节数组中,然后您可以CharsetDecoder
使用"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());