Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python和Oracle中的Base 64解码_Oracle_Python 2.7_Oracle11g_Base64_Decoding - Fatal编程技术网

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
方法实现了同样的效果,并比较了需要比较十六进制值。我在答案中添加了相同的值。你真的不应该依赖于此。字符
只是任何无效字符的占位符,即
可以表示不同数量的字节组合。