Lebih
Bagaimana anda dapat mengkodekan string Base64 di JavaScript?
Saya punya script PHP yang dapat mengkodekan gambar PNG Base64 string.
I'a ingin melakukan hal yang sama dengan menggunakan JavaScript. Aku tahu bagaimana untuk membuka file, tapi aku'm tidak yakin bagaimana untuk melakukan encoding. I'm tidak digunakan untuk bekerja dengan data biner.
744
23
Anda dapat menggunakan
btoa()
danatob()
untuk mengkonversi ke dan dari base64 encoding.Tampaknya ada beberapa kebingungan dalam komentar mengenai apa fungsi-fungsi ini menerima/kembali, jadi...
btoa()
menerima "string" di mana setiap karakter mewakili 8-bit byte – jika anda melewati sebuah string yang mengandung karakter yang tidak dapat direpresentasikan dalam 8 bit, mungkin akan memecah. Ini bukan masalah jika anda benar-benar memperlakukan string sebagai array byte, tetapi jika anda mencoba untuk melakukan sesuatu yang lain maka anda harus encode terlebih dahulu.atob()
mengembalikan "string" di mana setiap karakter mewakili 8-bit byte – yang, nilainya akan antara0
dan0xff
. Ini tidak berarti itu ASCII – mungkin jika anda menggunakan fungsi ini, anda mengharapkan untuk dapat bekerja dengan data biner dan teks.Lihat juga:
[Dari sini][1]:
Internet Explorer 10+
Lintas-Browser
Sunny's kode lebih besar kecuali istirahat di IE7 karena referensi untuk "ini". Tetap dengan mengganti referensi tersebut dengan "Base64":
Anda dapat menggunakan
btoa
(untuk basis-64) danatob
(dari base-64).Untuk IE 9 dan di bawah ini, coba jquery-base64 plugin:
Dari komentar-komentar (dengan MENGATUR dan Stefan Steiger) di bawah ini dengan jawaban yang diterima, di sini adalah ringkasan cepat tentang bagaimana untuk encode/decode string ke/dari base64 tanpa membutuhkan perpustakaan.
Demo
(menggunakan jQuery library, tapi tidak untuk encode/decode)
Ada's beberapa bug di kedua implementasi
_utf8_decode
.c1
danc2
ditugaskan sebagai variabel global karena patah penggunaanvar
pernyataan, danc3
tidak diinisialisasi atau menyatakan sama sekali.Ia bekerja, tetapi variabel ini akan menimpa file yang sudah ada dengan nama yang sama di luar fungsi ini.
Berikut ini's versi yang tidak't melakukan hal ini:
I +1'ed Cerah's jawaban, tapi saya ingin berkontribusi kembali beberapa perubahan yang saya buat untuk saya sendiri proyek dalam kasus orang harus menemukan itu berguna. Pada dasarnya saya've hanya dibersihkan kode asli sedikit sehingga JSLint doesn't mengeluh cukup banyak, dan saya membuat metode yang ditandai sebagai private di komentar benar-benar pribadi. Saya juga menambahkan dua metode yang saya butuhkan dalam proyek saya sendiri, yaitu
decodeToHex
danencodeFromHex
.Kode:
Untuk membuat Base64 encoded String URL friendly, dalam JavaScript anda bisa melakukan sesuatu seperti ini:
Lihat juga ini Biola: http://jsfiddle.net/magikMaker/7bjaT/
Saya kembali menulis dengan tangan, ini encoding dan decoding metode dengan pengecualian dari heksadesimal ke format modular untuk cross-platform / browser kompatibilitas dan juga dengan nyata pribadi scoping, dan menggunakan
btoa
danatob
jika mereka ada karena kecepatan daripada memanfaatkan sendiri encoding:https://gist.github.com/Nijikokun/5192472
Penggunaan:
Pertanyaan ini dan itu's jawaban menunjuk ke arah yang benar. Terutama dengan unicode atob dan btoa tidak dapat digunakan "vanili" dan hari ini SEMUANYA unicode ..
Langsung dari Mozilla, dua nice fungsi untuk tujuan ini (diuji dengan unicode dan tag-tag html di dalam)
Fungsi-fungsi ini akan melakukan kilat cepat dibandingkan dengan baku base64 decoding menggunakan javascript khusus yang berfungsi sebagai btoa dan atob dieksekusi di luar penerjemah.
Jika anda dapat mengabaikan IE tua tua dan ponsel (seperti iphone 3?) ini harus menjadi solusi yang baik.
Harap dicatat bahwa ini tidak cocok untuk raw string Unicode! Lihat Unicode bagian disini.
Sintaks untuk pengkodean
var encodedData = window.btoa(stringToEncode);
Sintaks untuk decoding
var decodedData = window.atob(encodedData);
jika anda perlu untuk encode HTML gambar objek, anda dapat menulis fungsi sederhana seperti:
Untuk mendapatkan base64 gambar dengan id:
lebih lanjut di sini
Untuk browser yang lebih baru untuk mengkodekan Uint8Array untuk string, dan men-decode string untuk Uint8Array.
Untuk Node.js anda dapat menggunakan berikut untuk mengkodekan string, Buffer, atau Uint8Array untuk string, dan decode dari string, Buffer, atau Uint8Array untuk Penyangga.
Berkontribusi dengan minified polyfill untuk
jendela.atob
+jendela.btoa
yang saya'm saat ini menggunakan.Berikut adalah AngularJS Pabrik versi @user850789's one:
I'd agak gunakan bas64 encode/decode metode dari CryptoJS, yang paling populer di perpustakaan untuk standar dan aman algoritma kriptografi yang diimplementasikan dalam JavaScript menggunakan praktek-praktek terbaik dan pola.
Saya membutuhkan pengkodean yang UTF-8 string sebagai base64 untuk proyek tambang. Sebagian besar jawaban di sini don't tampaknya benar menangani UTF-16 pengganti pasangan ketika mengkonversi ke UTF-8 jadi, untuk penyelesaian sake, saya akan posting solusi saya:
Perhatikan bahwa kode ini tidak benar-benar diuji. Saya diuji beberapa masukan, termasuk hal-hal seperti
strToUTF8Base64('衠衢蠩蠨')
dan dibandingkan dengan output dari sebuah online alat encoding (https://www.base64encode.org/).Nah, jika anda menggunakan dojo, ini memberi kita cara langsung untuk encode atau decode ke dalam base64.
Coba ini:-
Untuk menyandikan sebuah array dari byte menggunakan dojox.encoding.base64:
Untuk decode base64-encoded string:
Untuk proyek saya, saya masih perlu dukungan IE7 dan bekerja dengan input yang besar untuk encode.
Berdasarkan kode yang diusulkan oleh Joe Dyndale dan seperti yang disarankan di komentar oleh Marius, adalah mungkin untuk meningkatkan kinerja dengan IE7 dengan membangun hasilnya dengan array dan bukan string.
Berikut adalah contoh untuk meng-encode: