Декодирование Base 64 в Python и Oracle - PullRequest
0 голосов
/ 15 января 2020

Я пытаюсь скопировать некоторый код python 2.7 в базе данных Oracle.

При попытке реплицировать base64 decoding получаю другой вывод.

Python Код:

# -*- coding: utf-8 -*-
import base64
print(base64.b64decode('rO0ABXVyAAJbQqzzF/gGCFTgAgAAeHAAAAAgGLCRnyhEZhzJJRd7EoVPp2XWTRgDNYHq4cAghvXvTaw='))

Python Вывод кода:

�� ur [B���T� xp ���(Df�%{�O�e�M5���� ���M�

Oracle Запрос:

select utl_raw.cast_to_varchar2(UTL_ENCODE.BASE64_DECODE( UTL_RAW.CAST_TO_RAW ('rO0ABXVyAAJbQqzzF/gGCFTgAgAAeHAAAAAgGLCRnyhEZhzJJRd7EoVPp2XWTRgDNYHq4cAghvXvTaw='))) from dual;

Oracle Вывод запроса:

�ur[B��T�xp �Df�{��M5����

Вывод выглядит следующим образом частично то же самое, но не полностью.

Может быть из-за недостатка знаний, мне не хватает основ. Пожалуйста, предложите.

Ответы [ 2 ]

0 голосов
/ 16 января 2020

Я добился того же, используя метод UTL_ENCODE.TEXT_DECODE и AL32UTF8 как encode_charset.

 declare
 v2 varchar2(4000 char);
 begin
 v2 :=  UTL_ENCODE.TEXT_DECODE(
   'rO0ABXVyAAJbQqzzF/gGCFTgAgAAeHAAAAAgGLCRnyhEZhzJJRd7EoVPp2XWTRgDNYHq4cAghvXvTaw=', 
   'AL32UTF8', 
  UTL_ENCODE.BASE64);

  DBMS_OUTPUT.PUT_LINE('v2='||v2);

  end;  

Выход:

v2=��ur[B���T�xp ���(Df�%{�O�e�M5���� ���M�

0 голосов
/ 15 января 2020

Очевидно, что ваша строка BASE64 кодирует некоторые двоичные данные (т.е. не текстовые). В этом случае cast_to_varchar2 будет бесполезным.

Попробуйте TO_BLOB(UTL_ENCODE.BASE64_DECODE(UTL_RAW.CAST_TO_RAW('rO0ABXVyAAJbQqzzF/gGCFTgAgAAeHAAAAAgGLCRnyhEZhzJJRd7EoVPp2XWTRgDNYHq4cAghvXvTaw=')))

...