readasdataurl example ejemplos ejemplo javascript image base64 decode

javascript - example - readasdataurl



Error de CARÁCTER INVALIDO de la Excepción 5 de DOM en una cadena de imagen base64 válida en javascript (2)

Estoy tratando de decodificar una cadena base64 para una imagen de nuevo en binario para que un sistema operativo pueda descargarla y mostrarla localmente.

La cadena que he procesado correctamente cuando se coloca como fuente de un elemento IMG HTML con el prefacio de URI de datos (datos: img / png; base64), pero al usar la función atob o una función de cierre de goog, falla.

Sin embargo, la decodificación tiene éxito cuando se coloca aquí: http://www.base64decode.org/

¿Algunas ideas?

EDITAR: Lo conseguí decodificar con otra biblioteca que no sea la función JS incorporada. Pero, todavía no se abre localmente: en una Mac dice que está dañado o en un formato desconocido y no se puede abrir.

El código es algo como:

imgEl.src = ''data:img/png;base64,'' + contentStr; //this displays successfully decodedStr = window.atob(contentStr); //this throws the invalid char exception but i just //used a different script to get it decode successfully but still won''t display locally

la cadena base64 en sí es demasiado larga para mostrarse aquí (el límite es de 30,000 caracteres)


Estaba golpeando mi cabeza contra la pared en este por un tiempo.

Hay un par de causas posibles al problema. 1) Utf-8 problemas. Hay una buena redacción + una solución para eso aquí. http://monsur.hossa.in/2012/07/20/utf-8-in-javascript.html

En mi caso, también tenía que asegurarme de que todo el espacio en blanco estaba fuera de la cadena antes de pasárselo a atob. p.ej

function decodeFromBase64(input) { input = input.replace(//s/g, ''''); return atob(input); }

Lo que fue realmente frustrante fue que la base64 se analizó correctamente utilizando la biblioteca base64 en python, pero no en JS.


Tuve que eliminar los data:audio/wav;base64, frente al b64, ya que esto fue dado como parte del b64.

var data = b64Data.substring(b64Data.indexOf('','')+1);

var processed = atob(data);