EncodeUtil作った。

仕事で文字コード変換が必要になりそうなので、ためしに作ってみた。

public class EncodingUtil {

	private static final String EMPTY_STRING = "";
	private static final byte[] EMPTY_BYTES = EMPTY_STRING.getBytes();

	public static String convert2bytes2String4EBCDIC(byte[] data) {
		return decode(data, "cp939");
	}

	// EBCDIC対応文字以外はそのまま
	public static byte[] convert2String2bytes4EBCDIC(String data) {
		return encode(data, "cp939");
	}

	public static String decode(byte[] data, String decodeName) {
		String returnValue = null;
		if (data == null || data.length == 0)
			return EMPTY_STRING;
		try {
			returnValue = new String(data, decodeName);
		} catch (UnsupportedEncodingException e) {
			throw new RuntimeException(e);
		}
		return returnValue;
	}

	public static byte[] encode(String data, String encodeName) {
		byte[] returnValue = null;
		if (data == null)
			return EMPTY_BYTES;
		try {
			returnValue = data.getBytes(encodeName);
		} catch (UnsupportedEncodingException e) {
			throw new RuntimeException(e);
		}

		return returnValue;
	}

	public static byte[] Convert2String2bytes4Jis0208(String data) {
		return encode(data, "x-JIS0208");
	}

	public static String Convert2Bytes2String4Jis0208(byte[] data) {
		return decode(data, "x-JIS0208");
	}

	public static boolean isConvert2Jis0208(String data) {
		// nullやブランクでもOK
		if (data == null || "".equals(data))
			return true;

		StringBuffer sb = new StringBuffer();
		for (int i = 0; i < data.length(); i++) {
			char c = data.charAt(i);
			// アスキー以外
			if (c > 0x80) {
				sb.append(c);
			}
		}
		String nonAsciiStr = sb.toString();
		try {
			String jis0208DecodedStr = new String(nonAsciiStr
					.getBytes("x-JIS0208"), "x-JIS0208");
			return nonAsciiStr.equals(jis0208DecodedStr);
		} catch (UnsupportedEncodingException ignore) {
		}

		return false;
	}

}