如何在Oracle中从Base64字符串中去除'\r\n'?

4
我在Oracle中创建了以下函数,将字符串转换为BASE64格式,但是在64个字符后出现了新行。函数如下:
function to_base64(t in varchar2) return varchar2 is
begin
  return utl_raw.cast_to_varchar2(utl_encode.base64_encode(utl_raw.cast_to_raw(t)));
end to_base64; 

我的输入是 tobase64('ACae23b41949dbcfa8cd2c8b114bb81af4:909f2edb3e9b8c7e9c545d2942aa8576')

输出结果如下,每64个字符后添加了一个新行。 QUNhZTIzYjQxOTQ5ZGJjZmE4Y2QyYzhiMTE0YmI4MWFmNDo5MDlmMmVkYjNlOWI4 YzdlOWM1NDVkMjk0MmFhODU3Ng==

有人可以建议如何去除新行或者该函数需要做哪些更改吗?

1个回答

8
您可以使用replace()方法单独删除这两个字符:
function to_base64(t in varchar2) return varchar2 is
begin
  return replace(
    replace(
      utl_raw.cast_to_varchar2(utl_encode.base64_encode(utl_raw.cast_to_raw(t))),
      chr(10)),
    chr(13)
  );
end to_base64; 

或者作为一对:
function to_base64(t in varchar2) return varchar2 is
begin
  return replace(
    utl_raw.cast_to_varchar2(utl_encode.base64_encode(utl_raw.cast_to_raw(t))),
    chr(13)||chr(10)
  );
end to_base64; 

然后无论如何

select to_base64('ACae23b41949dbcfa8cd2c8b114bb81af4:909f2edb3e9b8c7e9c545d2942aa8576')
from dual;

在单行上给出结果:

QUNhZTIzYjQxOTQ5ZGJjZmE4Y2QyYzhiMTE0YmI4MWFmNDo5MDlmMmVkYjNlOWI4YzdlOWM1NDVkMjk0MmFhODU3Ng==

但是在base64值中包含它们是很常见的,而且解码应该忽略它们。


谢谢。它像魔法一样奏效!但是这只是替换的解决方案吗? - Kinjan Bhavsar
你可以使用“translate”而不是“replace”。但是,如果你真的想要防止换行符被添加,似乎没有任何方法可以预防。 - Alex Poole
为什么它们通常被包含在内?你能指出一个解释它的文档吗? - Jimenemex
1
好的,MIME编码规定它“必须每行不超过76个字符表示”。SSL证书等通常也会生成带有换行符的文本。不确定为什么,可能是为了可读性。 - Alex Poole

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接