EncoderErrorTest.java

import java.nio.*;
import java.nio.charset.*;
public class EncoderErrorTest {
  public static void main(String[] args) throws CharacterCodingException {
    CharBuffer charB = CharBuffer.wrap("créés");
    Charset charset = Charset.forName("ASCII");
    CharsetEncoder cod = charset.newEncoder();
    // Le codeur lève une exception si caractère non codable en ASCII
    System.out.println(cod.unmappableCharacterAction()); // Affiche REPORT
    ByteBuffer byteB;
    try {
      byteB = cod.encode(charB);
    } catch (UnmappableCharacterException e) {
      System.out.println(charB.position());              // Affiche 2
    }
    // La codeur ignore le caractère non codable
    cod.onUnmappableCharacter(CodingErrorAction.IGNORE);
    charB.rewind();
    byteB = cod.encode(charB);
    writeToSystemOut(byteB);                             // Affiche crs
    // Le codeur remplace le caractère non codable par un '!'
    byte[] c = {(byte)'!'};
    cod.replaceWith(c);
    cod.onUnmappableCharacter(CodingErrorAction.REPLACE);
    charB.rewind();
    byteB = cod.encode(charB);
    writeToSystemOut(byteB);                             // Affiche cr!!s
  }
  static void writeToSystemOut(ByteBuffer byteB) {
    while (byteB.hasRemaining()) {
      System.out.write(byteB.get());
    }
    System.out.println();
  }
}