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 ASCII encoding in bytes
*/
public static byte[] asciiBytes(String s) {
try {
return s.getBytes("ASCII");
} catch (UnsupportedEncodingException e) {
throw new RuntimeException(e);
}
}
public static void main(String[] args) throws InvalidDataException {
stringUtf8(utf8Bytes("\0"));
stringAscii(asciiBytes("\0"));
}
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;
}
/*
* @return UTF-8 encoding in bytes
*/
public static byte[] utf8Bytes(String s) {
try {
return s.getBytes("UTF8");
} catch (UnsupportedEncodingException e) {
throw new RuntimeException(e);
}
}
}