在Oracle和Java中使用Base64
Oracle
UTL_RAW:处理二进制的数据包。
UTL_ENCODE:处理编码包。
UTL_ENCODE.BASE64_ENCODE使用
步骤:
- 先用UTL_RAW.CAST_TO_RAW把varchar2转换为raw类型.
- 使用UTL_ENCODE.BASE64_ENCODE编码.
使用UTL_RAW.CAST_TO_VARCHAR2从raw(二进制类型)转换为varchar2类型转换.
注意: raw类型也可以进行传递,但是Java中要使用Byte进行解析。
1
2select utl_raw.cast_to_varchar2(utl_encode.base64_encode(utl_raw.cast_to_raw('{"count": 1000}')))
from dual;UTL_ENCODE.BASE64_DECODE使用
1
select utl_raw.cast_to_varchar2(utl_encode.base64_decode(utl_raw.cast_to_raw('e1wiY291bnRcIjogMTAwMH0='))) from dual;
指定字符编码
1
2UTL_ENCODE.TEXT_ENCODE(string, charset);
UTL_ENCODE.TEXT_DECODE(string, charset);
Java
BASE64Decoder
BASE64Encoder
EncodeUtil:工具类
BASE64Encoder使用
1
2
3
4
5
6
7
8
9
10
11
12public static String encodeString(String plainText, String charSet)
{
BASE64Encoder encoder = new BASE64Encoder();
try
{
return encoder.encode(plainText.getBytes(charSet));
}
catch(UnsupportedEncodingException e)
{
throw new EncodeException("E0208.0013", EcpI18nUtil.localizedString("E0208.0013", "\u4E0D\u652F\u6301\u7684\u5B57\u7B26\u96C6"), e, new Object[0]);
}
}BASE64Decoder使用
1
2
3
4
5
6
7
8
9
10
11
12public static String decodeString(String encodedText, String charSet)
{
BASE64Decoder decoder = new BASE64Decoder();
try
{
return new String(decoder.decodeBuffer(encodedText), charSet);
}
catch(Exception e)
{
throw new EncodeException("E0208.0013", EcpI18nUtil.localizedString("E0208.0013", "\u89E3\u7801\u5931\u8D25"), e, new Object[0]);
}
}Java中byte和String相互转换
1
2
3
4
5
6// String -> byte
String str = "count";
byte[] bytes = str.getBytes("GBK");
// byte -> String
String str2 = new String(bytes, 'GBK');字符集
编码和解码都可以指定字符集。如果字符串中有中文 编码之后解码会出现乱码,因为Ecp工具类默认使用GBK字符集编码和解码。
注意
如果希望服务端Java编码之后可以在数据库过程中进行解码(反之亦然),请不要在关键业务数据中出现中文 。