Jika ini adalah pertanyaan dan jawaban "berbagi pengetahuan", saya pikir kami sedang mencari sesuatu yang sedikit lebih mendalam. Pencarian SO yang cepat juga muncul: stackoverflow.com/a/7368168/419
Kev
1
@ Mark Setiap string dikodekan oleh skema bit-encoding yang mendasari tertentu. Baik itu ASCII, UTF7, UTF8, .... Pertanyaan yang diajukan paling tidak lengkap.
Lorenz Lo Sauer
2
Tanyakan pada diri sendiri apakah Anda benar-benar perlu melakukan ini? Ingat base64 terutama dimaksudkan untuk mewakili data biner di ASCII, untuk menyimpan dalam bidang char dalam database atau mengirim melalui email (di mana baris baru dapat disuntikkan). Apakah Anda benar-benar ingin mengambil data karakter, mengonversinya menjadi byte, lalu mengonversinya kembali ke data karakter, kali ini tidak dapat dibaca dan tanpa petunjuk tentang apa pengkodean aslinya?
bbsimonbb
Mengapa kita harus peduli dengan penyandian asli? Kami menyandikan string ke dalam byte menggunakan representasi UTF8, yang dapat mewakili semua karakter string yang mungkin. Kami kemudian membuat serial data itu dan di sisi lain kami deserialize data itu dan kami merekonstruksi string yang sama yang kami miliki sebelumnya (objek string tetap tidak menyimpan informasi tentang pengkodean yang digunakan). Jadi mengapa ada kekhawatiran terkait pengkodean yang digunakan? Kita dapat menganggapnya sebagai cara berpemilik untuk merepresentasikan data bersambung, yang tidak seharusnya kita tertarik.
Null memeriksa string input di kedua fungsi dan solusinya sempurna :)
Sverrir Sigmundarson
22
@SverrirSigmundarson: Itu atau buat mereka metode ekstensi.
TJ Crowder
73
@SverrirSigmundarson - Mengapa cek nol? Dia bukan orang yang mereferensi string input. Pemeriksaan kosong harus mencegah NullReferenceExceptionkode Anda sendiri, bukan milik orang lain.
ken
16
@ken Dan orang lain akan mengatakan "Anda hanya harus mengekspos kesalahan dalam kode Anda sendiri, bukan orang lain", menerapkan prinsip paling tidak mengejutkan, dibumbui dengan "gagal awal" dan "enkapsulasi yang tepat". Kadang-kadang ini berarti membungkus kesalahan komponen tingkat rendah, terkadang sesuatu yang lain sama sekali. Dalam hal ini, saya akan setuju bahwa membungkus kesalahan deref jelas meragukan (ditambah kita semua perlahan-lahan menyetujui fakta bahwa null sebagai konsep adalah sedikit peretasan untuk memulai), tetapi kita masih dapat melihat beberapa efek jika tidak: nama parameter yang diberikan dalam pengecualian mungkin tidak benar jika dibiarkan tidak dicentang.
mentega
6
return System.Text.Encoding.UTF8.GetString (base64EncodedBytes, 0, base64EncodedBytes.Length); untuk windows phone 8
steveen zoleko
46
Saya membagikan implementasi saya dengan beberapa fitur rapi:
menggunakan Metode Extension untuk kelas Encoding. Alasannya adalah bahwa seseorang mungkin perlu mendukung berbagai jenis penyandian (tidak hanya UTF8).
Peningkatan lainnya gagal dengan anggun dengan hasil nol untuk entri nol - ini sangat berguna dalam skenario kehidupan nyata dan mendukung kesetaraan untuk X = decode (encode (X)).
Catatan: Ingatlah bahwa untuk menggunakan Metode Ekstensi Anda harus (!) Mengimpor namespace dengan usingkata kunci (dalam hal ini using MyApplication.Helpers.Encoding).
Kembali nulljika nullada perilaku yang sangat tidak konsisten. Tidak ada .net API lain yang berfungsi dengan string yang melakukan itu.
t3chb0t
4
@ t3chb0t merasa bebas untuk menyesuaikannya dengan kebutuhan Anda. Seperti cara itu disajikan di sini disesuaikan dengan kita. Ini bukan API publik;)
andrew.fox
1
Bukankah sekarang Anda harus mengirim 2 variabel ke pihak lain dalam komunikasi Anda (kepada siapa Anda mengirim data yang disandikan base64)? Anda perlu mengirim encoding yang digunakan dan data base64 yang sebenarnya? Bukankah lebih mudah jika Anda menggunakan konvensi di kedua sisi untuk menggunakan pengkodean yang sama? Dengan begitu Anda hanya perlu mengirim data base64, kan?
Mladen B.
38
Berdasarkan jawaban dari Andrew Fox dan Cebe, saya memutarnya dan menjadikannya ekstensi string, bukan ekstensi Base64String.
Saya akan menambahkan ParseBase64 (teks string ini, Encoding encoding, out string decodedText) (untuk mengisi pengecualian jika diperlukan, dan menyebutnya pada TryParseBase64
João Antunes
22
Sedikit variasi pada andrew.fox menjawab, karena string yang akan didekode mungkin bukan string yang dienkode base64 yang benar:
Alat daring tidak membantu dalam situasi ini - Dia bertanya bagaimana cara KODE TI. Saya sering bertanya-tanya mengapa orang mengatakan "Lihat alat online ini!", Karena OP tidak meminta alat online: D
publicstaticclassBase64Url{publicstaticstringEncode(string text){returnConvert.ToBase64String(Encoding.UTF8.GetBytes(text)).TrimEnd('=').Replace('+','-').Replace('/','_');}publicstaticstringDecode(string text){
text = text.Replace('_','/').Replace('-','+');switch(text.Length%4){case2:
text +="==";break;case3:
text +="=";break;}returnEncoding.UTF8.GetString(Convert.FromBase64String(text));}}
Pertanyaan bukan tentang Pengkodean URL, tetapi masih membantu ..
Momoro
Whoops, mempostingnya di bawah pertanyaan yang salah
juliushuck
Tidak masalah, masih menarik untuk melihat cara menyandikan / mendekodekan URL :)
Momoro
3
Anda dapat menampilkannya seperti ini:
var strOriginal = richTextBox1.Text;byte[] byt =System.Text.Encoding.ASCII.GetBytes(strOriginal);// convert the byte array to a Base64 stringstring strModified =Convert.ToBase64String(byt);
richTextBox1.Text=""+ strModified;
Sekarang, ubah kembali.
var base64EncodedBytes =System.Convert.FromBase64String(richTextBox1.Text);
richTextBox1.Text=""+System.Text.Encoding.ASCII.GetString(base64EncodedBytes);MessageBox.Show("Done Converting! (ASCII from base64)");
Ada berbagai versi Base64 yang tidak setuju tentang apa yang harus digunakan untuk angka 62 dan 63, sehingga DecodeBase64Digitdapat mentolerir beberapa di antaranya.
Jawaban:
Menyandi
Membaca sandi
sumber
NullReferenceException
kode Anda sendiri, bukan milik orang lain.Saya membagikan implementasi saya dengan beberapa fitur rapi:
Catatan: Ingatlah bahwa untuk menggunakan Metode Ekstensi Anda harus (!) Mengimpor namespace dengan
using
kata kunci (dalam hal iniusing MyApplication.Helpers.Encoding
).Kode:
Contoh penggunaan:
sumber
null
jikanull
ada perilaku yang sangat tidak konsisten. Tidak ada .net API lain yang berfungsi dengan string yang melakukan itu.Berdasarkan jawaban dari Andrew Fox dan Cebe, saya memutarnya dan menjadikannya ekstensi string, bukan ekstensi Base64String.
sumber
Sedikit variasi pada andrew.fox menjawab, karena string yang akan didekode mungkin bukan string yang dienkode base64 yang benar:
sumber
Anda dapat menggunakan rutinitas di bawah ini untuk mengonversi string ke format base64
Anda juga dapat menggunakan alat OnlineUtility.in online yang sangat bagus untuk menyandikan string dalam format base64
sumber
Pemakaian
sumber
URL aman Base64 Encoding / Decoding
sumber
Anda dapat menampilkannya seperti ini:
Sekarang, ubah kembali.
Saya harap ini membantu!
sumber
Bagi mereka yang hanya ingin menyandikan / mendekodekan masing-masing digit base64:
Ada berbagai versi Base64 yang tidak setuju tentang apa yang harus digunakan untuk angka 62 dan 63, sehingga
DecodeBase64Digit
dapat mentolerir beberapa di antaranya.sumber