Apa itu pengekodan aksara
Pengekodan ialah satu persetujuan: «nombor 65 bermaksud huruf A». Apabila anda menulis teks, program menyimpan nombor itu; apabila orang lain membukanya, programnya menterjemah semula nombor itu kepada huruf menggunakan persetujuan yang sama. Jika kedua-duanya tidak menggunakan jadual yang sama, teks menjadi rosak.
Perlu dibezakan dua idea. Satu ialah set aksara, senarai nombor yang sepadan dengan simbol. Satu lagi ialah cara nombor itu disimpan dalam bait. Dalam ASCII keduanya sama secara mudah; dalam Unicode tidak, dan di situlah UTF-8 masuk.
ASCII: 128 aksara 7 bit
ASCII (singkatan American Standard Code for Information Interchange) dipiawaikan pada 1960-an. Ia menggunakan 7 bit, iaitu 2 pangkat 7 = 128 kod, dari 0 hingga 127. Daripadanya, 33 ialah aksara kawalan (0 hingga 31 dan 127) dan 95 boleh dicetak (32 hingga 126, termasuk ruang).
Ia tidak mengandungi huruf beraksen, ñ, atau simbol euro: ia direka untuk bahasa Inggeris. Itu menerangkan mengapa jadual lain diperlukan kemudian.
| Aksara kawalan | Perpuluhan | Perenambelasan | Binari (7 bit) | Kegunaan |
|---|---|---|---|---|
| Nol (NUL) | 0 | 00 | 0000000 | Menandakan penghujung rentetan dalam beberapa bahasa pengaturcaraan |
| Tab mendatar (TAB) | 9 | 09 | 0001001 | Melompat ke perhentian tab seterusnya |
| Suapan baris (LF) | 10 | 0A | 0001010 | Turun ke baris seterusnya |
| Pulangan pengangkut (CR) | 13 | 0D | 0001101 | Kembali ke permulaan baris |
| Escape (ESC) | 27 | 1B | 0011011 | Memulakan urutan kawalan |
| Ruang | 32 | 20 | 0100000 | Aksara pertama yang boleh dicetak |
| Padam (DEL) | 127 | 7F | 1111111 | Memadam aksara |
Hubungan yang elok diingat
Jadual ini tidak disusun secara rawak. Dengan beberapa keteraturan, anda boleh membaca kod dari ingatan.
- Digit «0» hingga «9» menduduki 48 hingga 57 (30 hingga 39 dalam perenambelasan). Nilai sesuatu digit ialah kodnya tolak 48: «7» ialah 55, dan 55 − 48 = 7.
- Huruf besar bermula dari 65 («A») hingga 90 («Z») dan huruf kecil dari 97 («a») hingga 122 («z»).
- Perbezaan antara huruf besar dan huruf kecilnya sentiasa 32: «A» = 65 dan «a» = 97; «C» = 67 dan «c» = 99. Dalam binari hanya satu bit berubah: 01000001 untuk «A» dan 01100001 untuk «a».
- Untuk mengetahui kedudukan huruf besar dalam abjad, tolak 64: «C» ialah 67 dan 67 − 64 = 3, huruf ketiga.
- Oleh kerana semua huruf besar (65 hingga 90) mempunyai kod lebih kecil daripada huruf kecil (97 hingga 122), susunan abjad «mengikut kod» meletakkan «Zebra» sebelum «apple». Banyak program memerlukan pilihan perbandingan berasingan untuk menyusun dengan betul.
Penghujung baris: LF, CR dan CRLF
Pemisah baris nampak mudah, tetapi ditulis berbeza mengikut sistem. Unix, Linux dan macOS menggunakan satu aksara, LF (10). Windows menggunakan dua berturut-turut, CR dan LF (13 dan 10), dikenali sebagai CRLF. Mesin teleprinter lama memerlukan dua arahan berbeza: mengembalikan pembawa ke permulaan dan menggerakkan kertas satu baris.
Perbezaan itu menjadi punca fail yang kelihatan semuanya dalam satu baris dalam editor asas, atau dengan simbol pelik di hujung setiap baris. Jika anda ingin tahu kod setiap satu, taip LF atau CR dalam kotak carian jadual ASCII.
«ASCII lanjutan» bukan piawaian
Oleh kerana satu bait ada 8 bit dan ASCII hanya menggunakan 7, ada 128 kod bebas (128 hingga 255) dan setiap pengeluar dan wilayah mengisinya dengan cara masing-masing. Ini dikenali sebagai «ASCII lanjutan», tetapi tiada satu jadual tunggal: ada banyak, dipanggil halaman kod. Dua yang paling terkenal ialah Latin-1 (ISO-8859-1), yang mana é ialah kod 233, dan Windows-1252, yang serupa tetapi berbeza pada kod 128 hingga 159 (di situ ada, sebagai contoh, euro).
Masalahnya ialah kod 233 bermaksud «é» dalam satu jadual dan sesuatu yang lain dalam jadual lain. Teks yang ditulis dengan satu jadual dan dibaca dengan jadual lain menunjukkan sampah. Unicode lahir untuk menamatkan kekacauan itu.
Unicode dan UTF-8
Unicode memberi satu nombor unik, dipanggil titik kod, kepada setiap aksara bagi hampir semua sistem tulisan di dunia, ditambah simbol dan emoji. Hari ini ia mempunyai lebih 150,000 aksara. Ia ditulis dengan awalan U+ dan dalam perenambelasan: «A» ialah U+0041, «ñ» ialah U+00F1, euro ialah U+20AC dan emoji muka tersenyum ialah U+1F600. 128 titik kod pertama adalah tepat sama dengan ASCII.
UTF-8 ialah cara paling banyak digunakan untuk menyimpan nombor itu dalam bait, dan menggunakan 1 hingga 4 mengikut aksara. 128 aksara ASCII menggunakan satu bait yang serupa seperti dahulu, jadi teks ASCII juga ialah teks UTF-8 yang sah. Selebihnya menggunakan lebih banyak bait.
| Aksara | Titik kod | Bait dalam UTF-8 | Bait (perenambelasan) |
|---|---|---|---|
| A | U+0041 | 1 | 41 |
| é | U+00E9 | 2 | C3 A9 |
| ñ | U+00F1 | 2 | C3 B1 |
| € | U+20AC | 3 | E2 82 AC |
| 😀 | U+1F600 | 4 | F0 9F 98 80 |
Mengapa «Ã±» muncul menggantikan «ñ»
Ini ialah ralat paling biasa dan ada penjelasan tepat. ñ dalam UTF-8 ialah dua bait: C3 dan B1. Jika program menyangka teks itu dalam Latin-1, ia membaca setiap bait sebagai satu aksara: C3 ialah «Ã» dan B1 ialah «±». Hasilnya: «Ã±». Perkara yang sama berlaku dengan «é», yang kelihatan sebagai «Ã©», dan dengan «canción», yang muncul sebagai «canción».
Penyelesaiannya hampir selalu ialah memberitahu program supaya membuka fail sebagai UTF-8 (dalam editor teks atau dalam tetapan import hamparan). Apabila berlaku sebaliknya, teks Latin-1 dibaca sebagai UTF-8, biasanya muncul berlian dengan tanda soal, kerana bait tunggal itu tidak membentuk urutan UTF-8 yang sah.
Cara menggunakan jadual ASCII dan penukar
Alat «Jadual ASCII» menunjukkan 128 aksara dengan kodnya dalam perpuluhan, perenambelasan, perlapanan dan binari, serta nama aksara kawalan.
- Taip dalam kotak carian («Cari aksara atau kod») satu aksara, kod atau nama aksara kawalan (contohnya A, 65, 41 atau LF) untuk mencari barisnya.
- Gunakan butang tapis (Kawalan, Digit, Huruf besar, Huruf kecil, Simbol) untuk melihat satu kumpulan sahaja.
- Untuk menukar, taip teks dalam «Teks» dan pilih format (perpuluhan, perenambelasan, perlapanan atau binari): kod muncul di bawah. «Hola» memberi 72 111 108 97 dalam perpuluhan dan 48 6F 6C 61 dalam perenambelasan.
- Anda juga boleh membuatnya sebaliknya: tampal kod yang dipisahkan oleh ruang atau koma dalam «Kod» dan teks dibina. Dalam perenambelasan, awalan seperti 0x41 diterima.
Jika teks mengandungi aksara bukan ASCII, seperti ñ, alat memberi amaran dan menunjukkan kod Unicode-nya. Untuk melihat bait sebenar dalam UTF-8, gunakan «Teks ke binari»: ñ memberi 11000011 10110001, dua bait 8 bit. Batasannya: jadual hanya menunjukkan ASCII piawai, bukan lanjutan, dan semuanya dikira dalam pelayar anda tanpa menghantar teks ke mana-mana pelayan.
Soalan lazim
Berapa banyak aksara dalam ASCII?
128, dengan kod dari 0 hingga 127 dan 7 bit setiap satu. Daripadanya, 33 ialah kawalan dan 95 boleh dicetak, termasuk ruang.
Apakah kod ASCII bagi huruf A dan a?
«A» ialah 65 (41 dalam perenambelasan, 01000001 dalam binari) dan «a» ialah 97 (61 dalam perenambelasan, 01100001 dalam binari). Perbezaannya sentiasa 32.
Apakah beza antara ASCII dan Unicode?
ASCII mempunyai 128 aksara yang direka untuk bahasa Inggeris. Unicode mempunyai lebih 150,000, daripada hampir semua bahasa dan emoji, dan 128 yang pertama sama dengan ASCII.
Apa itu UTF-8?
Ia cara paling banyak digunakan untuk menyimpan teks Unicode dalam bait. Ia menggunakan 1 hingga 4 bait setiap aksara: aksara ASCII menggunakan satu, ñ menggunakan dua dan emoji empat.
Mengapa teks saya menunjukkan «Ã±» atau «Ã©»?
Kerana teks yang disimpan dalam UTF-8 sedang dibaca sebagai Latin-1. Buka fail dengan menyatakan pengekodan UTF-8 dan masalah selesai.