Декодирование Oracle utl_encode.base64_encode()

У меня есть кодированное значение Base64, которое было сгенерировано в Oracle, используя

select ... 
utl_encode.base64_encode(utl_raw.cast_to_raw(id)) as encodedid from ...

Исходным набором символов Oracle был UTF8 или Unicode. Теперь я пытаюсь декодировать это на С#, но результат возвращается неразборчиво.

encodedTranscript = "4D7A59344E7A49334D513D3D";
 byte[] encodedTid = Convert.FromBase64String(encodedTranscript);
 String transcriptId = Encoding.Unicode.GetString(encodedTid);

В этом случае полученный transcriptId неразборчив. Я пробовал Encoding.UTF8 и Encoding.Unicode, но оба результата неразборчивы.

Есть ли какие-нибудь предложения?

Заранее спасибо.

1 ответ

Вы должны знать, как "id" был первоначально сохранен. Какой тип столбца идентификатора? Как это было изначально закодировано? Как только вы это знаете, вам нужно пройти обратный путь. Предположим, что идентификатор первоначально был строкой в кодировке С# UTF8. Затем вы получили байты и сохранили их как необработанные в базе данных. Что вам нужно сделать, это прочитать необработанные байты из базы данных и закодировать их в UTF8 и voilà.

С другой стороны, если у вас есть идентификатор как строка utf8, тогда он получил байты и затем закодировал его на base64, вы должны декодировать base64 вместо того, чтобы кодировать его в raw. Затем возьмите необработанные байты и закодируйте их как utf8.

licensed under cc by-sa 3.0 with attribution.