UTL_ENCODE包提供编码数据及解码数据的方法。

BASE64_ENCODE

使用BASE64_ENCODE函数可以将RAW字符串或TEXT字符串转换为Base64格式的字符串。BASE64_ENCODE函数提供了以下两种语法:

  • BASE64_ENCODE(r IN RAW)
  • BASE64_ENCODE(loid IN OID)

该函数将返回RAW格式的值或OID。

参数

参数名称 描述
r 用于指定将被转换为Base64格式的RAW字符串。
loid 用于指定将被转换为Base64格式的大对象的对象ID。

示例

说明 在执行下列示例之前,要调用命令:
SET bytea_output = escape;

这个指令用于命令服务器忽略任何非输出字符,且用可读形式在屏幕上显示BYTEA或RAW值。更多信息,请参见Postgres核心文件

使用BASE64_ENCODE函数将一个字符串转换为Base64格式。示例如下:

SELECT UTL_ENCODE.BASE64_ENCODE(CAST ('abc' AS RAW));

返回示例如下:

 base64_encode
---------------
 YWJj
(1 row)

BASE64 DECODE

使用BASE64_DECODE函数将会对Base64格式的字符串进行解码,转换为最初由BASE64_ENCODE函数编码的初始值。语法如下:

BASE64_DECODE(r IN RAW)

该函数将返回RAW格式的值。

参数

参数名称 描述
r Base64格式的数据字符串,由BASE64_ENCODE函数编码。

示例

说明 在执行下列示例之前,要调用命令:
SET bytea_output = escape;

这个指令用于命令服务器忽略任何非输出字符,且用可读形式在屏幕上显示BYTEA或RAW值。更多信息,请参见Postgres核心文件

使用BASE64_DECODE函数将Base64格式字符串转换为RAW格式。示例如下:

SELECT UTL_ENCODE.BASE64_DECODE(CAST ('YWJj' AS RAW));

返回示例如下:

 base64_decode
---------------
 abc
(1 row)

MIMEHEADER_ENCODE

使用MIMEHEADER_ENCODE函数可以将字符串转换为MIME标头格式,再对这个字符串编码。语法如下:

MIMEHEADER_ENCODE(buf IN VARCHAR2, encode_charset IN VARCHAR2 DEFAULT NULL, encoding IN INTEGER DEFAULT NULL)

该函数将返回VARCHAR2格式的值。

参数

参数名称 描述
buf 要被格式化和编码的字符串。该字符串需要为VARCHAR2格式的值。
encode_charset 用于在格式化和编码字符串之前,指定字符串将要转换为哪种字符集。默认为NULL。
encoding 用于指定在编码字符串时使用的编码类型。您可以指定以下两种编码类型:
  • 指定Q则启用Quoted-printable编码类型。
  • 指定B则启用Base-64编码类型。
说明 默认为Quoted-printable编码。

示例

使用MIMEHEADER_ENCODE函数对一个字符串进行编码。示例如下:

SELECT UTL_ENCODE.MIMEHEADER_ENCODE('What is the date?') FROM DUAL;

返回示例如下:

      mimeheader_encode
------------------------------
 =?UTF8?Q?What is the date??=
(1 row)

MIMEHEADER_DECODE

使用MIMEHEADER_DECODE函数解码由MIMEHEADER_ENCODE函数编码的值。语法如下:

MIMEHEADER_DECODE(buf IN VARCHAR2)

该函数将返回VARCHAR2格式的值。

参数

参数名称 描述
buf 要被解码的值,由MIMEHEADER_ENCODE函数编码 。

示例

使用MIMEHEADER_DECODE函数对MIMEHEADER_ENCODE函数编码的字符串进行解码。示例如下:

SELECT UTL_ENCODE.MIMEHEADER_DECODE('=?UTF8?Q?What is the date??=') FROM DUAL;

返回示例如下:

 mimeheader_decode
-------------------
 What is the date?
(1 row)

QUOTED_PRINTABLE_ENCODE

使用QUOTED_PRINTABLE_ENCODE函数将字符串转换并编码为Quoted-printable格式。语法如下:

QUOTED_PRINTABLE_ENCODE(r IN RAW)

该函数将返回RAW格式的值。

参数

参数名称 描述
r 要被编码为Quoted-printable格式的字符串。

示例

说明 在执行下列示例之前,先调用命令:
SET bytea_output = escape;          

这个指令用于命令服务器忽略任何非输出字符,且用可读形式在屏幕上显示BYTEA或RAW值。更多信息,请参见Postgres核心文件

使用QUOTED_PRINTABLE_ENCODE函数对一个字符串进行编码。示例如下:

SELECT UTL_ENCODE.QUOTED_PRINTABLE_ENCODE('E=mc2') FROM DUAL;

返回示例如下:

 quoted_printable_encode
-------------------------
 E=3Dmc2
(1 row)

QUOTED_PRINTABLE_DECODE

使用QUOTED_PRINTABLE_DECODE函数将一个编码的Quoted-printable字符串转换为一个解码的RAW字符串。语法如下:

QUOTED_PRINTABLE_DECODE(r IN RAW)

该函数将返回RAW格式的值。

参数

参数名称 描述
r 将要被解码的编码字符串。这个字符串是一个RAW值,由QUOTED_PRINTABLE_ENCODE函数编码。

示例

说明 在执行下列示例之前,先调用命令:
SET bytea_output = escape;

这个指令用于命令服务器忽略任何非输出字符,且用可读形式在屏幕上显示BYTEA或RAW值。更多信息,请参见Postgres核心文件

使用QUOTED_PRINTABLE_DECODE函数对一个字符串进行解码。示例如下:

SELECT UTL_ENCODE.QUOTED_PRINTABLE_DECODE('E=3Dmc2') FROM DUAL;

返回示例如下:

 quoted_printable_decode
-------------------------
 E=mc2
(1 row)

TEXT_ENCODE

使用TEXT_ENCODE函数将字符串转换为指定的字符集,再对该字符串进行编码。语法如下:

TEXT_DECODE(buf IN VARCHAR2, encode_charset IN VARCHAR2 DEFAULT NULL, encoding IN PLS_INTEGER DEFAULT NULL)

该函数将返回VARCHAR2格式的值。

参数

参数名称 描述
buf 待编码的字符串。
encode_charset 用于在编码之前指定值将被转换为的字符集。默认值为NULL 。
encoding 用于指定由TEXT_ENCODE使用的编码类型。您可以指定以下两种编码类型:
  • 指定Q则启用Quoted-printable编码类型。
  • 指定B则启用Base-64编码类型。
说明 默认为Quoted-printable编码。

示例

使用TEXT_ENCODE函数编码一个字符串。示例如下:

SELECT UTL_ENCODE.TEXT_ENCODE('What is the date?', 'BIG5', UTL_ENCODE.BASE64) FROM DUAL;

返回示例如下:

       text_encode
--------------------------
 V2hhdCBpcyB0aGUgZGF0ZT8=
(1 row)

TEXT_DECODE

使用TEXT_DECODE函数转换并解码一个编码的字符串为VARCHAR2格式,这个VARCHAR2格式的值最初是由TEXT_ENCODE函数编码的。语法如下:

TEXT_DECODE(buf IN VARCHAR2, encode_charset IN VARCHAR2 DEFAULT NULL, encoding IN PLS_INTEGER DEFAULT NULL)

该函数将返回VARCHAR2格式的值。

参数

参数名称 描述
buf 待解码的字符串,由TEXT_ENCODE函数编码。
encode charset 用于在编码之前指定字符串将要转换为的字符集。默认为NULL。
encoding 用于指定由TEXT_DECODE使用的编码类型。您可以指定以下两种编码类型:
  • UTL_ENCODE.QUOTED_PRINTABLE用于指定Quoted-printable编码。
  • UTL_ENCODE.BASE64用于指定Base-64编码。
说明 默认为Quoted-printable编码。

示例

下列示例先使用TEXT_ENCODE函数编码一个字符串,然后再使用TEXT_DECODE函数解码这个字符串:

使用TEXT_DECODE函数进行解码。示例如下:

SELECT UTL_ENCODE.TEXT_DECODE('V2hhdCBpcyB0aGUgZGF0ZT8=', 'BIG5', UTL_ENCODE.BASE64) FROM DUAL;

返回示例如下:

    text_decode
-------------------
 What is the date?
(1 row)

UUENCODE

使用UUENCODE 函数将RAW数据转换为UUENCODE格式的编码字符串。语法如下:

UUENCODE(r IN RAW, type IN INTEGER DEFAULT 1, filename IN VARCHAR2 DEFAULT NULL, permission IN VARCHAR2 DEFAULT NULL)

该函数将返回RAW格式的值。

参数

参数名称 描述
r 要被转换为UUENCODE格式的字符串。
type 用于指定要返回的uuencoded字符串的类型。默认为1。具体内容,请参见表 1
filename 指定您想要在编码形式中嵌入的文件名称。如果您不指定文件名称,UUENCODE将在编码形式中包含uuencode .txt文件名。
permission 用于指定权限模式。默认为NULL。
表 1. type
Value Constant
1 complete
2 header_piece
3 middle_piece
4 end_piece

示例

说明 在执行下列示例之前,要先调用命令:
SET bytea_output = escape;

这个指令用于命令服务器忽略任何非输出字符,且用可读形式在屏幕上显示BYTEA或RAW值。更多信息,请参见Postgres核心文件

使用UUENCODE函数编码一个字符串。示例如下:

SELECT UTL_ENCODE.UUENCODE('What is the date?') FROM DUAL;

返回示例如下:

                              uuencode
--------------------------------------------------------------------
 begin 0 uuencode.txt\01215VAA="!I<R!T:&4@9&%T93\\`\012`\012end\012
(1 row)

UUDECODE

使用UUDECODE函数将UUENCODE编码字符串转换并解码为RAW值,这个RAW值最初是由UUENCODE函数编码的。语法如下:

UUDECODE(r IN RAW)

该函数将返回RAW格式的值。

参数

参数名称 描述
r 包含要被转换为RAW值的uuencoded字符串。

示例

说明 在执行下列示例之前,要调用命令:
SET bytea_output = escape;

这个指令用于命令服务器忽略任何非输出字符,且用可读形式在屏幕上显示BYTEA或RAW值。更多信息,请参见Postgres核心文件

使用UUDECODE函数解码一个字符串。示例如下:

SELECT UTL_ENCODE.UUDECODE('begin 0 uuencode.txt\01215VAA="!I<R!T:&4@9&%T93\\`\012`\012end\012') FROM DUAL;

返回示例如下:

     uudecode
-------------------
 What is the date?
(1 row)

polar_enable_base64_decode

开启polar_enable_base64_decode参数可以让BASE64_DECODE函数自动识别错误格式的编码串,然后将编码串中有效的前半部分进行解码。BASE64_DECODE函数的具体信息,请参见BASE64 DECODE

说明 polar_enable_base64_decode参数默认为off状态,该参数目前无法在控制台进行修改,如有需要您可以提交工单联系技术支持进行修改。
  • 开启参数,传入一个错误格式的编码串,示例如下:
    select utl_encode.base64_decode(utl_raw.cast_to_raw('NjMzNDgwN==gNjMzNjMz'));

    BASE64_DECODE函数将会对有效的前半部分进行解码,正常返回示例如下:

     base64_decode  
    ----------------
     \x363333343830
    (1 row)
  • 关闭参数,传入一个错误格式的编码串,示例如下:
    select utl_encode.base64_decode(utl_raw.cast_to_raw('NjMzNDgwN==gNjMzNjMz'));

    BASE64_DECODE函数将无法对错误格式的编码串进行解码,错误返回示例如下:

    ERROR:  unexpected "=" while decoding base64 sequence