Python和Oracle中的Base 64解码
我试图在Python和Oracle中的Base 64解码,oracle,python-2.7,oracle11g,base64,decoding,Oracle,Python 2.7,Oracle11g,Base64,Decoding,我试图在Oracle数据库中复制一些python2.7代码 当尝试复制base64解码时,我得到了不同的输出 Python代码: # -*- coding: utf-8 -*- import base64 print(base64.b64decode('rO0ABXVyAAJbQqzzF/gGCFTgAgAAeHAAAAAgGLCRnyhEZhzJJRd7EoVPp2XWTRgDNYHq4cAghvXvTaw=')) Python代码输出: # -*- coding: utf-8 -*- im
Oracle
数据库中复制一些python2.7
代码
当尝试复制base64解码时,我得到了不同的输出
Python代码:
# -*- coding: utf-8 -*-
import base64
print(base64.b64decode('rO0ABXVyAAJbQqzzF/gGCFTgAgAAeHAAAAAgGLCRnyhEZhzJJRd7EoVPp2XWTRgDNYHq4cAghvXvTaw='))
Python代码输出:
# -*- coding: utf-8 -*-
import base64
print(base64.b64decode('rO0ABXVyAAJbQqzzF/gGCFTgAgAAeHAAAAAgGLCRnyhEZhzJJRd7EoVPp2XWTRgDNYHq4cAghvXvTaw='))
�� ur[B���T� xp���(Df)�%{�O�E�M5���� ���M�代码>
Oracle查询:
# -*- coding: utf-8 -*-
import base64
print(base64.b64decode('rO0ABXVyAAJbQqzzF/gGCFTgAgAAeHAAAAAgGLCRnyhEZhzJJRd7EoVPp2XWTRgDNYHq4cAghvXvTaw='))
从dual中选择utl_raw.cast_to_varchar2(utl_ENCODE.BASE64_DECODE(utl_raw.cast_to_raw('ro0abxvyaajbqqqzzf/ggcftgagegaaehaaaaggregatcrnyzhzhjrd7eovpp2xwtrgdnyhq4caghvtaw=');
Oracle查询输出:
# -*- coding: utf-8 -*-
import base64
print(base64.b64decode('rO0ABXVyAAJbQqzzF/gGCFTgAgAAeHAAAAAgGLCRnyhEZhzJJRd7EoVPp2XWTRgDNYHq4cAghvXvTaw='))
�ur[B��T�xp�Df�{��M5����代码>
输出似乎部分相同,但不完全相同
可能是由于缺乏知识,我缺少基本知识。请建议。显然,您的BASE64字符串编码了一些二进制数据(即非文本)。在这种情况下,强制转换为varchar2
将毫无用处
尝试TO_BLOB(UTL_ENCODE.BASE64_DECODE(UTL_RAW.CAST_TO_RAW('rO0ABXVyAAJbQqzzF/ggcftgaaehaaaaaggreggcrnyhezhzjrd7eovpp2xwtrgdnyhq4caghvtaw='))
我使用UTL_编码.TEXT_DECODE
方法和AL32UTF8
编码字符集实现了同样的效果
declare
v2 varchar2(4000 char);
begin
v2 := UTL_ENCODE.TEXT_DECODE(
'rO0ABXVyAAJbQqzzF/gGCFTgAgAAeHAAAAAgGLCRnyhEZhzJJRd7EoVPp2XWTRgDNYHq4cAghvXvTaw=',
'AL32UTF8',
UTL_ENCODE.BASE64);
DBMS_OUTPUT.PUT_LINE('v2='||v2);
end;
输出:
# -*- coding: utf-8 -*-
import base64
print(base64.b64decode('rO0ABXVyAAJbQqzzF/gGCFTgAgAAeHAAAAAgGLCRnyhEZhzJJRd7EoVPp2XWTRgDNYHq4cAghvXvTaw='))
v2=��ur[B���T�xp���(Df)�%{�O�E�M5���� ���M�
您所说的“在oracle数据库中复制python代码”到底是什么意思?@DeepSpace,正如之前在python代码中所做的,现在在数据库中所做的那样。感谢您的回复,我尝试了到\u blob(UTL\u ENCODE.BASE64\u DECODE(UTL\u RAW.CAST\u到\u RAW('rO0ABXVyAAJbQqzzF/ggcftgagaaaaaggreggcrnyhezhjjrd7eovpp2xwtrgdnyhq4caghvtaw='))
,输出为(BLOB)
,我需要以文本形式查看输出,以便进行比较。我不建议将二进制数据作为文本进行比较,这是无用的。您可以使用十六进制编辑器对结果进行比较,也许您以前必须将其保存为文件。谢谢。是的,我认为您是对的。我使用UTL\u ENCODE.text\u DECODE
方法实现了同样的效果,并比较了需要比较十六进制值。我在答案中添加了相同的值。你真的不应该依赖于此。字符�
只是任何无效字符的占位符,即�代码>可以表示不同数量的字节组合。