Kas ir rakstzīmju kodējums
Kodējums ir vienošanās: „skaitlis 65 nozīmē burtu A”. Kad rakstāt tekstu, programma saglabā šos skaitļus; kad cits cilvēks to atver, viņa programma tos atkal pārvērš burtos, izmantojot to pašu vienošanos. Ja abi neizmanto vienu un to pašu tabulu, teksts iznāk nepareizs.
Jāatšķir divas idejas. Viena ir rakstzīmju kopa, saraksts, kuri skaitļi atbilst kuriem simboliem. Otra ir tas, kā šie skaitļi tiek saglabāti baitos. ASCII abas sakrīt triviāli; Unicode ne, un tur parādās UTF-8.
ASCII: 128 rakstzīmes pa 7 bitiem
ASCII (saīsinājums no American Standard Code for Information Interchange) tika standartizēts 20. gadsimta 60. gados. Tas izmanto 7 bitus, tas ir 2 pakāpē 7 = 128 kodus, no 0 līdz 127. No tiem 33 ir vadības rakstzīmes (no 0 līdz 31 un 127) un 95 ir drukājamas (no 32 līdz 126, ieskaitot atstarpi).
Tajā nav ne burtu ar garumzīmēm vai mīkstinājuma zīmēm, ne ñ, ne eiro simbola: tas tika veidots angļu valodai. Tas izskaidro, kāpēc vēlāk bija vajadzīgas citas tabulas.
| Vadības rakstzīme | Decimālais | Heksadecimālais | Binārais (7 biti) | Kam tā domāta |
|---|---|---|---|---|
| Nulle (NUL) | 0 | 00 | 0000000 | Vairākās valodās atzīmē virknes beigas |
| Horizontālā tabulācija (TAB) | 9 | 09 | 0001001 | Pāriet uz nākamo tabulatoru |
| Rindas pārbīde (LF) | 10 | 0A | 0001010 | Pāriet uz nākamo rindu |
| Karetes atgriešana (CR) | 13 | 0D | 0001101 | Atgriežas rindas sākumā |
| Escape (ESC) | 27 | 1B | 0011011 | Sāk vadības secības |
| Atstarpe | 32 | 20 | 0100000 | Pirmā drukājamā rakstzīme |
| Dzēšana (DEL) | 127 | 7F | 1111111 | Dzēš rakstzīmi |
Attiecības, kuras der atcerēties
Tabula nav sakārtota nejauši. Ar dažām likumsakarībām varat lasīt kodus no galvas.
- Cipari no „0” līdz „9” aizņem no 48 līdz 57 (30 līdz 39 heksadecimālajā). Cipara vērtība ir tā kods mīnus 48: „7” ir 55, un 55 − 48 = 7.
- Lielie burti iet no 65 („A”) līdz 90 („Z”), bet mazie no 97 („a”) līdz 122 („z”).
- Starpība starp lielo burtu un tā mazo burtu vienmēr ir 32: „A” = 65 un „a” = 97; „C” = 67 un „c” = 99. Binārajā mainās tikai viens bits: 01000001 „A” un 01100001 „a”.
- Lai uzzinātu, kurā vietā alfabētā ir lielais burts, atņemiet 64: „C” ir 67 un 67 − 64 = 3, trešais burts.
- Tā kā visiem lielajiem burtiem (65 līdz 90) kodi ir mazāki nekā mazajiem (97 līdz 122), alfabētiska kārtošana „pēc koda” liek „Zebra” pirms „apple”. Daudzām programmām pareizai kārtošanai vajag atsevišķu salīdzināšanas iespēju.
Rindas beigas: LF, CR un CRLF
Rindas pārbīde šķiet kaut kas vienkāršs, bet atkarībā no sistēmas to raksta atšķirīgi. Unix, Linux un macOS izmanto vienu rakstzīmi, LF (10). Windows izmanto divas pēc kārtas, CR un LF (13 un 10), kas pazīstamas kā CRLF. Vecajiem teletaipiem vajadzēja divas atsevišķas komandas: atgriezt karreti sākumā un pavirzīt papīru par vienu rindu.
Šī atšķirība ir iemesls failiem, kas vienkāršā redaktorā izskatās kā viena rinda, vai ar dīvainu simbolu katras rindiņas beigās. Ja meklējat, kāds kods ir katram, ASCII tabulas meklētājā ierakstiet LF vai CR.
„Paplašinātais ASCII” nav standarts
Tā kā baitam ir 8 biti, bet ASCII izmanto tikai 7, palika 128 brīvi kodi (no 128 līdz 255), un katrs ražotājs un reģions tos aizpildīja pa savam. To sauc par „paplašināto ASCII”, taču vienas tabulas nav: to ir daudz, tās sauc par kodu lapām. Divas no zināmākajām ir Latin-1 (ISO-8859-1), kur é ir kods 233, un Windows-1252, līdzīga, bet ar atšķirībām kodos no 128 līdz 159 (tur, piemēram, ir eiro).
Problēma ir tā, ka kods 233 vienā tabulā nozīmē „é”, bet citā kaut ko citu. Teksts, kas rakstīts ar vienu tabulu un lasīts ar citu, rādīja nesaprotamas rakstzīmes. Unicode radās, lai šo juceklim pieliktu punktu.
Unicode un UTF-8
Unicode piešķir unikālu skaitli, ko sauc par koda punktu, katrai gandrīz visu pasaules rakstības sistēmu rakstzīmei, kā arī simboliem un emocijzīmēm. Šodien tajā ir vairāk nekā 150 000 rakstzīmju. To raksta ar prefiksu U+ un heksadecimālajā sistēmā: „A” ir U+0041, „ñ” ir U+00F1, eiro ir U+20AC un smaidošās sejas emocijzīme ir U+1F600. Pirmie 128 koda punkti ir tieši tādi paši kā ASCII.
UTF-8 ir visbiežāk izmantotais veids, kā šos skaitļus saglabāt baitos, un tas izmanto no 1 līdz 4 atkarībā no rakstzīmes. 128 ASCII rakstzīmes aizņem vienu baitu, tādu pašu kā vienmēr, tāpēc ASCII teksts ir arī derīgs UTF-8 teksts. Pārējās aizņem vairāk baitu.
| Rakstzīme | Koda punkts | Baiti UTF-8 | Baiti (heksadecimālajā) |
|---|---|---|---|
| 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 |
Kāpēc „ñ” parādās „ñ” vietā
Tā ir visbiežākā kļūda, un tai ir precīzs izskaidrojums. „ñ” UTF-8 ir divi baiti: C3 un B1. Ja programma uzskata, ka teksts ir Latin-1, tā lasa katru baitu kā rakstzīmi: C3 ir „Ô un B1 ir „±”. Rezultāts: „ñ”. Tas pats notiek ar „é”, kas izskatās kā „Ã©”, un ar „canción”, kas parādās kā „canción”.
Risinājums gandrīz vienmēr ir norādīt programmai atvērt failu kā UTF-8 (teksta redaktorā vai izklājlapas importa iestatījumos). Kad notiek otrādi, Latin-1 teksts tiek lasīts kā UTF-8, parasti parādās rombi ar jautājuma zīmi, jo šie atsevišķie baiti neveido derīgas UTF-8 secības.
Kā lietot ASCII tabulu un pārveidotāju
Rīks „ASCII tabula” parāda 128 rakstzīmes ar to kodu decimālajā, heksadecimālajā, oktālajā un binārajā sistēmā un vadības rakstzīmju nosaukumu.
- Meklētājā ierakstiet rakstzīmi, kodu vai vadības rakstzīmes nosaukumu (piemēram, A, 65, 41 vai LF), lai atrastu tās rindu.
- Izmantojiet filtra pogas (Vadības, Cipari, Lielie burti, Mazie burti, Simboli), lai redzētu tikai vienu grupu.
- Lai pārvērstu, ierakstiet tekstu laukā „Teksts” un izvēlieties formātu (decimālais, heksadecimālais, oktālais vai binārais): zemāk parādās kodi. „Hola” dod 72 111 108 97 decimālajā un 48 6F 6C 61 heksadecimālajā.
- To var arī otrādi: ielīmējiet kodus, atdalītus ar atstarpēm vai komatiem, laukā „Kodi”, un teksts tiek izveidots. Heksadecimālajā tiek pieņemti prefiksi, piemēram, 0x41.
Ja tekstā ir rakstzīmes, kas nav ASCII, piemēram, ñ, rīks par to paziņo un parāda to Unicode kodu. Lai redzētu reālos baitus UTF-8, izmantojiet „Teksts uz bināro kodu”: ñ dod 11000011 10110001, divus 8 bitu baitus. Ierobežojumi: tabula rāda tikai standarta ASCII, nevis paplašināto, un viss tiek aprēķināts jūsu pārlūkprogrammā, nenosūtot tekstu nevienam serverim.
Biežāk uzdotie jautājumi
Cik rakstzīmju ir ASCII?
128, ar kodiem no 0 līdz 127 un 7 bitiem katrai. No tām 33 ir vadības un 95 ir drukājamas, ieskaitot atstarpi.
Kāds ir burta A un a ASCII kods?
„A” ir 65 (41 heksadecimālajā, 01000001 binārajā) un „a” ir 97 (61 heksadecimālajā, 01100001 binārajā). Tie vienmēr atšķiras par 32.
Kāda ir atšķirība starp ASCII un Unicode?
ASCII ir 128 rakstzīmes, kas domātas angļu valodai. Unicode ir vairāk nekā 150 000 gandrīz visu valodu rakstzīmju un emocijzīmju, un tā pirmās 128 ir tādas pašas kā ASCII.
Kas ir UTF-8?
Tas ir visbiežāk izmantotais veids, kā saglabāt Unicode tekstu baitos. Tas izmanto no 1 līdz 4 baitiem uz rakstzīmi: ASCII rakstzīmes aizņem vienu, ñ aizņem divus un emocijzīme četrus.
Kāpēc manā tekstā ir redzams „ñ” vai „é”?
Jo UTF-8 saglabāts teksts tiek lasīts kā Latin-1. Atveriet failu, norādot UTF-8 kodējumu, un tas tiks salabots.