content: package org.java_websocket.util;
  
  import java.io.UnsupportedEncodingException;
  import java.nio.ByteBuffer;
  import java.nio.charset.CharacterCodingException;
  import java.nio.charset.Charset;
  import java.nio.charset.CharsetDecoder;
  import java.nio.charset.CodingErrorAction;
  
  import org.java_websocket.exceptions.InvalidDataException;
  import org.java_websocket.framing.CloseFrame;
  
  public class Charsetfunctions {
  
  	public static CodingErrorAction codingErrorAction = CodingErrorAction.REPORT;
  
  	/*
  	* @return UTF-8 encoding in bytes
  	*/
  	public static byte[] utf8Bytes( String s ) {
  		try {
  			return s.getBytes( "UTF8" );
  		} catch ( UnsupportedEncodingException e ) {
  			throw new RuntimeException( e );
  		}
  	}
  
  	/*
  	* @return ASCII encoding in bytes
  	*/
  	public static byte[] asciiBytes( String s ) {
  		try {
  			return s.getBytes( "ASCII" );
  		} catch ( UnsupportedEncodingException e ) {
  			throw new RuntimeException( e );
  		}
  	}
  
  	public static String stringAscii( byte[] bytes ) {
  		return stringAscii( bytes, 0, bytes.length );
  	}
  	
  	public static String stringAscii( byte[] bytes, int offset, int length ){
  		try {
  			return new String( bytes, offset, length, "ASCII" );
  		} catch ( UnsupportedEncodingException e ) {
  			throw new RuntimeException( e );
  		}
  	}
  
  	public static String stringUtf8( byte[] bytes ) throws InvalidDataException {
  		return stringUtf8( ByteBuffer.wrap( bytes ) );
  	}
  
  	/*public static String stringUtf8( byte[] bytes, int off, int length ) throws InvalidDataException {
  		CharsetDecoder decode = Charset.forName( "UTF8" ).newDecoder();
  		decode.onMalformedInput( codingErrorAction );
  		decode.onUnmappableCharacter( codingErrorAction );
  		//decode.replaceWith( "X" );
  		String s;
  		try {
  			s = decode.decode( ByteBuffer.wrap( bytes, off, length ) ).toString();
  		} catch ( CharacterCodingException e ) {
  			throw new InvalidDataException( CloseFrame.NO_UTF8, e );
  		}
  		return s;
  	}*/
  
  	public static String stringUtf8( ByteBuffer bytes ) throws InvalidDataException {
  		CharsetDecoder decode = Charset.forName( "UTF8" ).newDecoder();
  		decode.onMalformedInput( codingErrorAction );
  		decode.onUnmappableCharacter( codingErrorAction );
  		// decode.replaceWith( "X" );
  		String s;
  		try {
  			bytes.mark();
  			s = decode.decode( bytes ).toString();
  			bytes.reset();
  		} catch ( CharacterCodingException e ) {
  			throw new InvalidDataException( CloseFrame.NO_UTF8, e );
  		}
  		return s;
  	}
  
  	public static void main( String[] args ) throws InvalidDataException {
  		stringUtf8( utf8Bytes( "\0" ) );
  		stringAscii( asciiBytes( "\0" ) );
  	}
  
  }
  