23

画像のbase64文字列をデコードしてバイナリに戻し、OSでローカルにダウンロードして表示できるようにしようとしています。

データURIの序文(データ:img / png; base64、)を使用してHTML IMG要素のsrcとして配置すると、正常にレンダリングされた文字列ですが、atob関数またはgoogクロージャー関数を使用すると失敗します。

ただし、ここに入力するとデコードは成功します:http ://www.base64decode.org/

何か案は?

編集:組み込みのJS関数以外の別のライブラリでデコードすることに成功しました。しかし、それでもローカルでは開きません-Macでは、破損しているか不明な形式であり、開くことができないと表示されます。

コードは次のようなものです。

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

base64文字列自体が長すぎてここに表示できません(制限は30,000文字です)

4

2 に答える 2

42

しばらくの間、これの壁に頭をぶつけていました。

この問題にはいくつかの原因が考えられます。1)Utf-8の問題。ここに良い記事とその解決策があります

私の場合、atobに渡す前に、すべての空白が文字列から外れていることも確認する必要がありました。例えば

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

本当にイライラしたのは、base64がPythonでbase64ライブラリを使用して正しく解析されたが、JSでは正しく解析されなかったことです。

于 2013-04-19T22:07:22.250 に答える
3

data:audio/wav;base64,これはb64の一部として提供されたため、b64の前を削除する必要がありました。

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

var processed = atob(data);

于 2015-09-01T06:13:05.683 に答える