Pertanyaan Mengapa orang tidak menggunakan base128? [Tutup]


Mengapa semua orang menggunakan basis 64 untuk mentransmisikan data biner di web? Saya menanyakan itu karena set karakter ASCII memiliki 128 karakter yang secara teori dapat mewakili basis 128 ...


75
2018-05-15 11:18


asal


Jawaban:


Masalahnya adalah bahwa setidaknya 32 karakter dari set karakter ASCII adalah 'karakter kontrol' yang dapat ditafsirkan oleh terminal penerima. Misalnya, ada karakter BEL (lonceng) yang membuat terminal penerima berbunyi. Ada karakter SOT (Start Of Transmission) dan EOT (End Of Transmission) yang melakukan persis apa yang disiratkan oleh nama mereka. Dan jangan lupakan karakter CR dan LF, yang mana mungkin memiliki arti khusus dalam bagaimana struktur data diserialisasi / diratakan menjadi aliran.

Adobe dibuat pengkodean Base85 untuk menggunakan lebih banyak karakter dalam set karakter ASCII, tetapi AFAIK itu dilindungi oleh paten.


88
2018-05-15 13:43



Karena beberapa dari 128 karakter tersebut tidak dapat dicetak (terutama yang berada di bawah codepoint 0x20). Oleh karena itu, mereka tidak dapat dipercaya ditransmisikan sebagai string melalui kawat. Dan, jika Anda pergi di atas codepoint 128, Anda dapat memiliki masalah encoding karena pengkodean yang berbeda digunakan di seluruh sistem.


62
2018-05-15 11:23



Seperti yang sudah dinyatakan dalam jawaban lain, titik kuncinya adalah untuk mengurangi set karakter ke dicetak satu. Skema encoding yang lebih efisien basE91 karena menggunakan set karakter yang lebih besar dan masih menghindari karakter kontrol / spasi dalam kisaran ASCII rendah. Halaman web berisi perbandingan biner vs. base64 vs. basE91 efisiensi pengkodean.

Saya pernah membersihkan implementasi Java. Jika orang tertarik, saya bisa mendorongnya di GitHub.

Memperbarui: Bersalju di GitHub.


14
2018-05-15 14:59



Bahwa 32 karakter pertama adalah karakter kontrol sama sekali tidak ada relevansinya, karena Anda tidak perlu menggunakannya untuk mendapatkan 128 karakter. Kami memiliki 256 karakter untuk dipilih, dan hanya 32 yang pertama adalah karakter kontrol. Itu meninggalkan 192 karakter, dan karena itu 128 benar-benar mungkin tanpa menggunakan karakter kontrol.

Inilah alasannya: Ini harus menjadi sesuatu yang akan terlihat sama, dan Anda dapat menyalin dan menempel, di mana pun. Maka itu harus ada karakter yang akan ditampilkan sama pada setiap forum, obrolan, email dan sebagainya. Itu berarti bahwa kita tidak dapat menggunakan karakter, yang biasanya digunakan oleh forum / obrolan / klien email untuk memformat atau mengabaikan. Itu juga harus karakter yang sama, terlepas dari font, bahasa dan pengaturan regional.

Itulah alasannya!


13
2017-12-19 13:07



Base64 adalah umum karena memecahkan berbagai masalah (bekerja hampir di mana saja yang dapat Anda pikirkan)

  • Anda tidak perlu khawatir apakah transportasi itu 8-bit bersih atau tidak.

  • Semua karakter dalam pengkodean dapat dicetak. Kamu bisa Lihat mereka. Kamu bisa Salin dan tempel mereka. Anda dapat menggunakannya di URL (varian tertentu). dll.

  • Ukuran pengkodean tetap. Kamu tahu itu mbyte selalu bisa di-enkode n byte.

  • Semua orang pernah mendengarnya - itu didukung secara luas, banyak pustaka, sangat mudah untuk diinteroperasi.

Base128 tidak memiliki semua kelebihan itu.

Sepertinya bersih 8-bit - tetapi ingat bahwa base64 menggunakan 65 simbol. Tanpa karakter out-of-band Anda tidak dapat memiliki manfaat dari ukuran pengkodean tetap. Jika Anda menggunakan karakter out-of-band, Anda tidak dapat lagi 8-bit bersih.

Itu tidak semuanya negatif.

  • base128 lebih mudah dikodekan / dekode daripada base64 - Anda hanya menggunakan shift dan masker. Dapat menjadi penting untuk penerapan yang disematkan

  • base128 membuat penggunaan transpor sedikit lebih efisien daripada base64 dengan menggunakan lebih banyak bit yang tersedia.

Orang-orang melakukan gunakan base128 - Saya menggunakannya untuk sesuatu sekarang. Itu tidak biasa.


9
2017-10-13 03:45



Tidak yakin, tapi saya pikir nilai yang lebih rendah (yang mewakili kode kontrol atau sesuatu) tidak dapat ditransfer dengan baik sebagai teks / karakter di dalam permintaan-HTTP / tanggapan, dan nilai di atas 127 mungkin lokal / codepage / apa pun yang spesifik, jadi tidak ada 128 karakter berbeda yang dapat diharapkan bekerja di semua browser / platform.


4
2018-05-15 11:22



esaji benar. Base64 digunakan untuk menyandikan data biner untuk transmisi menggunakan protokol yang hanya mengharapkan teks. Itu benar di dalam Wiki masuk.


3
2018-05-15 11:24



Checkout basis128 PHP-Class. Encoding dan decoding dengan ISO 8859-1 charset.

GoogleCode PHP-Class Base128


2
2018-05-05 11:57