2012-12-11 144 views
1

在我的應用程序中我需要從圖像上顯示的擴展ASCII表中獲取字符。但是當我將十進制值轉換爲char時,我得到了不同的字符。這些字符在JAVA中的真正價值是什麼?我不會在控制檯或文件中將字符寫入圖像中。JAVA擴展ASCII表使用

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

謝謝您的幫助,對不起我的英語不好:-)

enter image description here

+2

「擴展ASCII表」是簡單的「以上ASCII」八位字節值,以碼元的終端(或其他呈現設備)上的一個映射。也就是說,它只是許多[code-pages](http://en.wikipedia.org/wiki/Code_page)中的一個*來映射128-255的值。也就是說,顯示的字符取決於它應用的*什麼*顯示它(例如指定的含義和「字體」)和其他適用的規則(例如代碼頁或「語言」)。 – 2012-12-11 19:07:16

+0

那麼如何強制我的java程序使用這個代碼頁? –

+0

http://en.wikipedia.org/wiki/List_of_Unicode_characters可能是這可以幫助你。 – Smit

回答

0

我對這個問題的解決方案是我manualy創造了我需要

這些字符一個字符數組
+0

這可能是一個很好的解決方案,但要確保在源代碼中將它們編碼爲Unicode點(使用\ U),否則當代碼被解釋爲不同的字符集時可能會遇到麻煩。 –

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