Apakah kode ASCII 7-bit atau 8-bit?

100

Guru saya memberi tahu saya bahwa ASCII adalah skema pengkodean karakter 8-bit. Tetapi itu didefinisikan hanya untuk kode 0-127 yang berarti dapat dimasukkan ke dalam 7-bit. Jadi tidak bisakah dikatakan bahwa bit ASCII sebenarnya adalah kode 7-bit?

Dan apa yang ingin kami katakan ketika mengatakan ASCII adalah kode 8-bit?

Anurag Kalia
sumber

Jawaban:

91

ASCII memang awalnya dipahami sebagai kode 7-bit. Hal ini dilakukan dengan baik sebelum byte 8-bit tersedia di mana-mana, dan bahkan hingga tahun 1990-an Anda dapat menemukan perangkat lunak yang mengasumsikan dapat menggunakan bit ke-8 dari setiap byte teks untuk tujuannya sendiri ("bukan 8-bit bersih"). Saat ini orang menganggapnya sebagai pengkodean 8-bit di mana byte 0x80 hingga 0xFF tidak memiliki arti yang ditentukan, tetapi itu retcon .

Ada lusinan pengkodean teks yang menggunakan bit ke-8; mereka dapat diklasifikasikan sebagai kompatibel dengan ASCII atau tidak, dan lebar tetap atau variabel. Kompatibel dengan ASCII artinya apa pun konteksnya , byte tunggal dengan nilai dari 0x00 hingga 0x7F menyandikan karakter yang sama dengan yang mereka lakukan di ASCII. Anda tidak ingin ada hubungannya dengan pengkodean teks yang tidak kompatibel dengan ASCII jika Anda mungkin dapat menghindarinya; Program naif yang mengharapkan ASCII cenderung salah menafsirkannya dengan cara yang sangat berbahaya, seringkali merusak keamanan. Mereka sangat usang saat ini sehingga (misalnya) HTML5 melarang penggunaannya di Web publik, dengan pengecualian yang tidak menguntungkan dari UTF-16 . Saya tidak akan membicarakannya lagi.

Pengkodean lebar tetap berarti seperti apa suaranya: semua karakter dikodekan menggunakan jumlah byte yang sama. Agar kompatibel dengan ASCII, pengkodean tetap-dengan harus mengenkode semua karakternya hanya menggunakan satu byte, sehingga tidak boleh lebih dari 256 karakter. Pengkodean yang paling umum saat ini adalah Windows-1252 , perpanjangan dari ISO 8859-1 .

Hanya ada satu pengkodean yang kompatibel dengan ASCII dengan lebar variabel yang perlu diketahui saat ini, tetapi ini sangat penting: UTF-8 , yang mengemas semua Unicode ke dalam pengkodean yang kompatibel dengan ASCII. Anda benar-benar ingin menggunakan ini jika Anda bisa mengelolanya.

Sebagai catatan terakhir, "ASCII" saat ini mengambilnya praktisnya definisi dari Unicode, bukan standar aslinya (ANSI X3.4-1968), karena secara historis terdapat beberapa lusin variasi pada repertoar ASCII 127 karakter - misalnya, beberapa tanda baca mungkin diganti dengan huruf beraksen untuk memfasilitasi transmisi teks bahasa Prancis. Saat ini semua variasi tersebut sudah usang, dan ketika orang mengatakan "ASCII" itu berarti bahwa byte dengan nilai 0x00 sampai 0x7F menyandikan titik kode Unicode U + 0000 sampai U + 007F. Ini mungkin hanya penting bagi Anda jika Anda pernah menulis standar teknis.

Jika Anda tertarik dengan sejarah ASCII dan pengkodean sebelumnya, mulailah dengan makalah "The Evolution of Character Codes, 1874-1968" (salinan samizdat di http://falsedoor.com/doc/ascii_evolution-of- character-codes.pdf ) dan kemudian mengejar referensinya (banyak di antaranya tidak tersedia secara online dan mungkin sulit ditemukan bahkan dengan akses ke perpustakaan universitas, dengan menyesal saya katakan).

zwol
sumber
1
Jadi apakah ASCII saat ini 7-bit atau 8-bit? Anda mengatakan itu menggunakan 0x00-0x7F sekarang, jelas. Tapi apakah kita menghitung 0 terdepan?
Anurag Kalia
8
Itu tergantung pada jenis pedant Anda. Spesifikasi yang masih secara resmi mendefinisikan ASCII (ANSI X3.4-1968) menggambarkannya sebagai pengkodean 7-bit, tetapi tidak ada lagi yang mentransmisikan byte 7-bit, dan interoperabilitas saat ini menyatakan bahwa bit kedelapan harus nol - Anda tidak bisa gunakan untuk sedikit paritas atau serupa. Jadi, IMNSHO yang sama validnya untuk menggambarkan ASCII sebagai pengkodean delapan-bit yang kebetulan meninggalkan separuh atas ruang bilangannya sebagai "dicadangkan, jangan gunakan". Apa pun itu, jika Anda mengirimkan byte delapan-bit yang salah satunya memiliki kumpulan bit tinggi, Anda tidak mengirimkan ASCII yang valid.
zwol
1
(... tetapi Anda mungkin mengirimkan sesuatu yang valid-lain, seperti UTF-8 atau ISO 8859-1 atau KOI8-R.)
zwol
1
Untuk menjadi sangat berlebihan, standarnya sekarang INCITS 4-1986 [R2012] karena ASC yang sebelumnya dikenal sebagai X3 bermutasi menjadi NCITS lalu INCITS. Tetapi varian 7-bit dengan sekitar selusin huruf beraksen untuk Prancis, Jerman, Spanyol, dll. Bukanlah ANSI / INCITS apa pun, melainkan ISO / IEC 646 dan ECMA-6. Dan 8-bit (ISO / IEC) 8859-1 yang membentuk blok 256-karakter pertama Unicode.
dave_thompson_085
2
@ dave_thompson_085 Tidak semua orang sepintar Anda - yang berarti Anda dapat menemukan dokumentasi teknis yang lebih lama, dan bahkan standar, referensi "ASCII", atau bahkan "X3.4-1968", yang bermaksud untuk memasukkan varian nasional, atau setidaknya tidak mengesampingkan secara jelas, yang mengarah ke argumen. Oleh karena itu, saya pribadi akan menggunakan Unicode sebagai referensi normatif untuk ASCII jika saya harus menulis spesifikasi yang penting. Itu saja yang saya maksud.
zwol
14

Di Linux man asciimengatakan:

ASCII adalah Kode Standar Amerika untuk Pertukaran Informasi. Ini adalah kode 7-bit.

BeniBela
sumber
9

Tabel ASCII asli dikodekan pada 7 bit sehingga memiliki 128 karakter.

Saat ini kebanyakan pembaca / editor menggunakan tabel ASCII "diperpanjang" (dari ISO 8859-1 ), yang dikodekan pada 8 bit dan menikmati 256 karakter (termasuk Á , Ä , Œ , é , è dan karakter lain yang berguna untuk bahasa Eropa juga sebagai mesin terbang matematika dan simbol lainnya).

Sementara UTF-8 menggunakan pengkodean yang sama seperti tabel ASCII dasar (artinya 0x41adalah A di kedua kode), tidak berbagi pengkodean yang sama untuk blok "Latin Extended-A". Yang terkadang menyebabkan karakter aneh muncul dalam kata-kata seperti à la carte atau piñata .

Guillaume
sumber
Ada beberapa kesalahan di atas. Œ bukan bagian dari ISO 8859-1 meskipun dalam CP-1252 . Dan blok Latin Extended-A bukanlah 128 atau 256 karakter pertama Unicode: ini adalah blok berikutnya setelah ini berisi huruf seperti ğ, ł dan ſ.
Richard Smith
Poin bagus! Saya pikir yang saya maksud adalah "Tambahan Latin-1". Standar standar ...
Guillaume
1
Ada banyak himpunan karakter "ASCII yang Diperluas" dan hanya salah satunya adalah ISO 8859-1. Istilah ini hampir tidak berarti karena saat Anda menyandikan dan mendekode teks, Anda harus tahu pengkodean karakter tertentu yang digunakan (dan bahkan mungkin bukan untuk kumpulan karakter ASCII yang Diperluas).
Tom Blodget
2

Pengkodean ASCII adalah 7-bit, tetapi dalam praktiknya, karakter yang dikodekan dalam ASCII tidak disimpan dalam kelompok 7-bit. Sebaliknya, satu ASCII disimpan dalam satu byte, dengan MSB biasanya disetel ke 0 (ya, ini terbuang dalam ASCII).

Anda dapat memverifikasi ini dengan memasukkan string dalam kumpulan karakter ASCII di editor teks, menyetel penyandian ke ASCII, dan melihat biner / hex:
masukkan deskripsi gambar di sini

Selain: penggunaan pengkodean (secara ketat) ASCII sekarang jarang, mendukung UTF-8 (yang tidak menyia-nyiakan MSB yang disebutkan di atas - pada kenyataannya, MSB 1 menunjukkan titik kode dikodekan dengan lebih dari 1 byte).

flow2k
sumber
0

Kode ASCII asli menyediakan 128 karakter berbeda dengan nomor 0 hingga 127. ASCII 7-bit adalah sinonim, karena 8-bit byte adalah elemen penyimpanan umum, ASCII menyisakan ruang untuk 128 karakter tambahan yang digunakan untuk bahasa asing dan simbol lainnya. Tetapi kode 7-bit asli dibuat sebelum kode 8-bit. ASCII adalah singkatan dari American Standard Code for Information Interchange Pada sistem surat internet awal, hanya mendukung kode ASCII 7-bit, ini karena kemudian dapat menjalankan program dan file multimedia melalui sistem menyedot. Sistem ini menggunakan 8 bit byte tetapi kemudian harus diubah menjadi format 7-bit menggunakan metode pengkodean seperti MIME, UUcoding dan BinHex. Ini berarti 8-bit telah diubah menjadi karakter 7-bit, yang menambahkan byte ekstra untuk menyandikannya.

brookey
sumber
-3

ketika kita memanggil ASCII sebagai kode 7 bit, bit paling kiri digunakan sebagai bit tanda sehingga dengan 7 bit kita dapat menulis hingga 127. itu berarti dari -126 hingga 127 karena nilai imam maks ASCII adalah 0 hingga 255. ini bisa jadi hanya puas dengan argumen 7 bit jika bit terakhir dianggap sebagai bit tanda

aju
sumber
Bagaimana karakter memiliki tanda?
Oleh Misarosh