21.2 ASCII-Code
 
ASCII ASCII ist die Abkürzung für American Standard Code for Information Interchange. Insgesamt gibt es 128 solche Zeichen. Jeder Zahl entspricht nach diesem Standard genau ein Zeichen, dabei wird von 0 bis 127 gezählt. So wird z.B. mit der Zahl 65 das Zeichen 'A' verschlüsselt. Allerdings ist diese Verschlüsselung nicht wie in der Kryptologie üblich geheim, sie ist standardisiert und wird von allen Rechnern benutzt. Um auch andere Zeichen (chinesische, arabische, kyrillische etc. darstellen zu können, reicht der ASCII Code nicht mehr aus. Mittlerweile gibt es den Unicode, der eine Erweiterung des ASCII-Codes darstellt, diesen also als Teilmenge enthält. Java unterstützt von Anfang an diesen Unicode. Wirr werden später darauf zurückkommen.

Die Zahlen 0 bis 127 reichen in der Binärdarstellung von 00000000 bis 01111111. Wir erkennen, dass wir die Zeichen in einem Byte also 8 bit unterbringen. und damit das höchste Bit zunächst nicht besetzen. Tatsächlich benutzt man das höchste Bit als Prüfzeichen. Es wird so gesetzt, dass die Anzahl der in der 8 Zeichen umfassenden Speicherbereich vorkommenden 1 en eine gerade Zahl ist. Um das Prüfbit per Hand zu setzen, muss man den ASCII-Code in Binärdarstellung kennen.
 

Übungsbeispiel 1 Wir schreiben ein Programm, das die ASCII-Codierung der Zahlen 0 bis 127 zeigt.
 
Download: ASCII.java
public class ASCII {

  public static void main (String[] args) {
    for (int ascii=0; ascii<128; ascii++){
        System.out.println(ascii+": "+(char)ascii);
    }
  }
}
 
 
   0:       1: ☺    2: ☻    3: ♥    4: ♦    5: ♣
   6: ♠    7:     8:     9:     10:   11: ♂
  12: ♀   13:    14: ♫   15: ☼   16: ►   17: ◄
  18: ↕   19: ‼   20: ¶   21: §   22: ▬   23: ↨
  24: ↑   25: ↓   26: →   27: ←   28: ∟   29: ↔
  30: ▲   31: ▼   32:   33: !   34: "   35: #
  36: $   37: %   38: &   39: '   40: (   41: )
  42: *   43: +   44: ,   45: -   46: .   47: /
  48: 0   49: 1   50: 2   51: 3   52: 4   53: 5
  54: 6   55: 7   56: 8   57: 9   58: :   59: ;
  60: <   61: =   62: >   63: ?   64: @   65: A
  66: B   67: C   68: D   69: E   70: F   71: G
  72: H   73: I   74: J   75: K   76: L   77: M
  78: N   79: O   80: P   81: Q   82: R   83: S
  84: T   85: U   86: V   87: W   88: X   89: Y
  90: Z   91: [   92: \   93: ]   94: ^   95: _
  96: `   97: a   98: b   99: c  100: d  101: e
 102: f  103: g  104: h  105: i  106: j  107: k
 108: l  109: m  110: n  111: o  112: p  113: q
 114: r  115: s  116: t  117: u  118: v  119: w
 120: x  121: y  122: z  123: {  124: |  125: }
 126: ~  127: ⌂        

 

  Man erkennt, das an manchen Stellen keine Zeichen stehen. Die Zahlen 0, 7 bis 10, 32. So steht die 7 für BEL ein Glockenton, den man auch hört, wenn das Programm bei der Ausgabe dieses Zeichen steht. Die Zeichen müssen  nicht unbedingt auf dem Bildschirm stehen, es können z.B. auch Steuerzeichen, Zeichen also im abstrakteren Sinne sein.
 
Übungsbeispiel 2 Schreiben Sie ein Programm, dass die folgende Spezifikation erfüllt. Ein JFrame hat ein editierbares Eingabefeld im 'Norden' und ein nicht editierbares  Ausgabefeld im 'Süden'. Im 'Zentrum' ist ein Button mit der Aufschrift 'Gib aus!'. Drückt man den Button, wird die im Eingabefeld eingetragene Zahl als ASCII-Code interpretiert und das Zeichen im Ausgabefeld ausgegeben. Falsche Eingaben sollen abgefangen werden, wobei das Eingabefeld gelöscht und im Ausgabefeld der Kommentar 'Falsche Eingabe!' erscheint.
 
 
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Jascii extends JFrame implements ActionListener{
  // Anfang Variablen
  JButton gibAus;
  JTextField eingabeFeld, ausgabeFeld;
  // Ende Variablen

  public Jascii (String title) {
    // Frame-Initialisierung
    super (title);
    addWindowListener(new WindowAdapter() {
      public void windowClosing (WindowEvent evt) {
        System.exit(0);
      }
    });
    setSize(200, 100);
    Container cp = getContentPane();
    cp.setLayout(new BorderLayout());

    // Anfang Komponenten
    eingabeFeld = new JTextField();
    cp.add(eingabeFeld, BorderLayout.NORTH);
    
    gibAus = new JButton("Gib aus!");
    cp.add(gibAus, BorderLayout.CENTER);
    gibAus.addActionListener(this);
    
    ausgabeFeld = new JTextField();
    ausgabeFeld.setEditable(false);
    cp.add(ausgabeFeld, BorderLayout.SOUTH);
    // Ende Komponenten

    setVisible(true);
  }

  // Anfang Ereignisprozeduren
  public void actionPerformed(ActionEvent e){
    try {
       int num = Integer.parseInt(eingabeFeld.getText());
       if (num<=127){
         ausgabeFeld.setText(""+(char)num);
       }
       else{
         eingabeFeld.setText("");
         ausgabeFeld.setText("ASCII geht nur bis 127");
       }

    }
    catch(NumberFormatException cfe){
      eingabeFeld.setText("");
      ausgabeFeld.setText("Falsche Eingabe!");
    }
  }
  // Ende Ereignisprozeduren

  public static void main (String[] args) {
    new Jascii("ASCII");
  }
}
Bemerkung Wir erkennen, dass dort, wo die Konsolenausgabe kein Zeichen liefert, auch dieses mal kein Zeichen geliefert wird. Bei manchen anderen liefert die Windowsausgabe ein kleines Rechteck, wo die Konsolenausgabe noch Zeichen liefert. Windows wicht hier also von DOS ab. Tatsächlich lassen sich auch Zahlen größer als 127 als Zeichen interpretierten. Es handelt sich dabei um den sog. erweiterten ASCII-Code:
JApplet zum Testen

zu 21.3 Eine erste Verschlüsselung
zur Startseite www.pohlig.de  (C) MPohlig 2003