/** * license (MIT) Copyright Nubisa Inc. 2014 */ package jxm; import jxm.JWS.EX.InvalidDataException; import jxm.JWS.FR.CloseFrame; 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; public class CHRF { 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(ByteBuffer bytes) throws InvalidDataException { CharsetDecoder decode = Charset.forName("UTF8").newDecoder(); decode.onMalformedInput(codingErrorAction); decode.onUnmappableCharacter(codingErrorAction); String s; try { bytes.mark(); s = decode.decode(bytes).toString(); bytes.reset(); } catch (CharacterCodingException e) { throw new InvalidDataException(CloseFrame.NO_UTF8, e); } return s; } }