It looks like UTF-16. To create a String from these bytes, use:
new String(byte[]{0x00, 0x21}, "UTF-16")
This creates a String which holds the exclamation mark. The character is charAt(0).
EDIT
might not be the most performant approach but it works for other encodings as well...
EDIT
OK, there was a misunderstanding, the above code was not a solution but an example on how to faciliate the String constructor to create a String from a series of bytes in a special encoding. As it's an example, it looked static. Here's the runtime solution (knowing that especially the accepted solution fits much better - this one is just more general):
public char decodeUTF16(byte b1, byte b2) {
return decode(new byte[]{b1, b2}).charAt(0);
}
public String decodeUTF16(byte[] bytes) {
return decode(bytes, "UTF-16");
}
public String decode(byte[] bytes, String encoding) {
return new String(bytes, encoding);
}