Kako podesiti pametne telefone i računare. Informativni portal

Ascii kodiranje. Sistemi kodiranja teksta

Skup znakova kojim se piše tekst naziva se abeceda.

Broj znakova u abecedi je njegov moć.

Formula za određivanje količine informacija: N = 2 b,

gdje je N kardinalnost abecede (broj znakova),

b - broj bitova (informaciona težina karaktera).

Abeceda kapaciteta 256 znakova može primiti gotovo sve potrebne znakove. Ova abeceda se zove dovoljno.

Jer 256 = 2 8, tada je težina 1 znaka 8 bita.

8-bitna jedinica je dobila ime 1 bajt:

1 bajt = 8 bitova.

Binarni kod svakog znaka u kompjuterskom tekstu zauzima 1 bajt memorije.

Kako su tekstualne informacije predstavljene u memoriji računara?

Pogodnost bajt kodiranja znakova je očigledna, budući da je bajt najmanji adresabilni dio memorije i stoga procesor može pristupiti svakom karakteru zasebno, obavljajući obradu teksta. S druge strane, 256 znakova je sasvim dovoljan broj za predstavljanje širokog spektra informacija o znakovima.

Sada se postavlja pitanje kakvu vrstu osmobitnog binarnog koda povezati sa svakim znakom.

Jasno je da je ovo uslovna stvar, možete smisliti mnoge metode kodiranja.

Svi znakovi kompjuterske abecede su numerisani od 0 do 255. Svaki broj odgovara osmocifrenom binarni kod od 00000000 do 11111111. Ovaj kod je samo redni broj znaka u binarni sistem obračun.

Tabela u kojoj su svim znakovima kompjuterske abecede dodijeljeni serijski brojevi naziva se tabela kodiranja.

Za različite vrste Računari koriste različite tablice kodiranja.

Međunarodni standard za PC je postao stol ASCII(čitaj asci) (američki standardni kod za razmjenu informacija).

ASCII tabela je podijeljena na dva dijela.

Međunarodni standard je samo prva polovina tabele, tj. simboli sa brojevima iz 0 (00000000), do 127 (01111111).

Struktura ASCII tablice kodiranja

Serijski broj

Kod

Simbol

0 - 31

00000000 - 00011111

Simboli s brojevima od 0 do 31 obično se nazivaju kontrolni znakovi.
Njihova funkcija je kontrola procesa prikazivanja teksta na ekranu ili štampanja, unošenja zvučni signal, označavanje teksta itd.

32 - 127

00100000 - 01111111

Standardni dio tabele (engleski). Ovo uključuje mala i velika slova latinica, decimalne cifre, znakovi interpunkcije, sve vrste zagrada, komercijalni i drugi simboli.
Znak 32 je razmak, tj. prazna pozicija u tekstu.
Svi ostali se ogledaju u određenim znacima.

128 - 255

10000000 - 11111111

Alternativni dio tabele (ruski).
Druga polovina tablica kodova ASCII, nazvan kodna stranica (128 kodova od 10000000 do 11111111), može imati različite opcije, svaka opcija ima svoj broj.
Kodna stranica se prvenstveno koristi za smještaj nacionalnih alfabeta osim latinice. U ruskim nacionalnim kodovima, ovaj dio tabele sadrži simbole ruskog alfabeta.

Prva polovina ASCII tabele


Skrećem vam pažnju da su u tablici kodiranja slova (velika i mala slova) raspoređena abecednim redom, a brojevi rastućim redoslijedom vrijednosti. Ovo poštovanje leksikografskog reda u rasporedu znakova naziva se princip sekvencijalnog kodiranja abecede.

Za slova ruske abecede također se poštuje princip sekvencijalnog kodiranja.

Druga polovina ASCII tabele


Nažalost, trenutno postoji pet različitih ćiriličkih kodiranja (KOI8-R, Windows. MS-DOS, Macintosh i ISO). Zbog toga često nastaju problemi s prijenosom ruskog teksta s jednog računara na drugi, s jednog softverski sistem drugome.

Hronološki, jedan od prvih standarda za kodiranje ruskih slova na računarima bio je KOI8 („Kod za razmjenu informacija, 8-bitni“). Ovo kodiranje je korišćeno još 70-ih godina na računarima serije računara ES, a od sredine 80-ih počelo je da se koristi u prvim rusifikovanim verzijama UNIX operativnog sistema.

Od početka 90-ih, vremena dominacije operativnog sistema MS DOS, ostaje CP866 kodiranje („CP“ znači „Code Page“).

Kompjuteri Apple rade pod kontrolom operacione sale Mac sistemi OS, koristite vlastito Mac kodiranje.

Pored toga, Međunarodna organizacija za standardizaciju (International Standards Organization, ISO) odobrila je još jedno kodiranje pod nazivom ISO 8859-5 kao standard za ruski jezik.

Najčešći je trenutno Microsoft kodiranje Windows, skraćeno CP1251.

Od kasnih 90-ih, problem standardizacije kodiranja znakova riješen je uvođenjem novog međunarodnog standarda tzv. Unicode... Ovo je 16-bitno kodiranje, tj. dodjeljuje 2 bajta memorije za svaki znak. Naravno, ovo udvostručuje količinu korištene memorije. Ali s druge strane, takva kodna tabela omogućava uključivanje do 65536 znakova. Puna specifikacija Unicode standard uključuje sve postojeće, izumrle i umjetno stvorene alfabete svijeta, kao i mnoge matematičke, muzičke, hemijske i druge simbole.

Pokušajmo koristiti ASCII tablicu da zamislimo kako će riječi izgledati u memoriji računara.

Interno predstavljanje riječi u memoriji računara

Ponekad se desi da se tekst koji se sastoji od slova ruske abecede, primljen sa drugog računara, ne može pročitati - na ekranu monitora je vidljiva neka vrsta "blebetanja". To je zbog činjenice da računari koriste različito kodiranje znakova ruskog jezika.

Kodiranje teksta

Kodiranje teksta je uspostavljanje tablice korespondencije između kodiranog znaka i kombinacije stanja bitova, odnosno proces kodiranja se sastoji u tome da se svakom znaku dodjeljuje jedinstveni kod... Trenutno postoje različiti sistemi kodiranja, a glavna razlika između njih je broj bitova potrebnih za kodiranje jednog znaka.

ASCII (američki Standardni kod za razmjenu informacija): za kodiranje jednog znaka koristi se količina informacija = 7 bita. Ako simbole smatramo mogućim događajima (vidi predavanje 1), onda možemo izračunati broj simbola koji se mogu kodirati:

2*26-pisma

32-različita karaktera

34-servisna znaka

128 znakova

Dakle, broj kodiranih znakova je ograničen, tako da je nemoguće kodirati slova ruske abecede u sedmobitnom sistemu kodiranja. Pojavio se zadatak da se istovremeno prikazuju i ruski i latinski znakovi. Načini rješavanja ovog problema su transliteracija i proširenje kodiranja.

Osmobitni sistemi kodiranja:

Ako je najznačajniji bit koda 0, tada se sistem kodiranja poklapa sa ASCII, ako je najznačajniji bit –1, tada se unose dodatne kodne stranice.

U Rusiji je kreiran jedan od takvih sistema KOI-8, nedostatak mu je što ruska slova nisu raspoređena po abecednom redu.Pored toga postoje CP-866, CP-1251, ANSI koji se koriste u Windows operativnom sistemu.

Velike kodne stranice:

Za kodiranje jednog znaka potrebno je 16 bita

Naravno, kod takvog sistema kodiranja ne postoji problem nemogućnosti kodiranja određenog znaka, jer 65535 više nego pokriva raznovrsnost korištenih znakova, ali UNICODE ima još jedan nedostatak: kada prevodite tekstove iz ASCII u UNICODE, veličina računara tekst se značajno povećava. U tom smislu, razvijena je druga klasa sistema kodiranja koristeći varijabilni broj bit za kodiranje znakova.

Ako je najznačajniji bit koda je nula(bit8 = 0), tada je sistem kodiranja isti kao ASCII, pri čemu je svaki od prvih 128 karaktera kodiran u jednom bajtu.
Ako je stariji je jednako jedan(bit8 = 1, bit7 = 0), tada se sljedećih 16384 karaktera kodiraju slično kao UNICODE, odnosno dva bajta se koriste za kodiranje svakog znaka. Preostali znakovi (65535-128-16384 = 49023) su kodirani u tri bajta.

Primjer: razmotrite koliko informacija nosi niz znakova "Informacije × - × Informacije"
u raznim sistemima kodiranja. U slučaju CP1251, svaki znak je kodiran sa jednim bajtom Þ količinom informacija: 24 * 1 = 24 bajta. U UNICODE-u, svaki znak je kodiran sa dva bajta Þ količina informacija: 24 * 2 = 48 bajtova. U UTF-8, kodiranje latiničnih slova, razmaka i crtica zahtijeva jedan bajt za svaki znak, a svaki znak riječi "Informacija" je kodiran sa dva bajta Þ količina informacija: 14 * 1 + 10 * 2 = 34 bajtova.


S jedne strane, kompjuterski tekst je abecedni, prema kojem se tekst predstavlja kao niz znakova ( abecedni pristup). Drugi pristup je da se kompjuterski tekst već smatra složenom strukturom koja se sastoji od mnogih nizova znakova.

t: (1, 2, 3 ... k) je jedan od takvih lanaca dužine k.

Ovaj pristup omogućava razumijevanje algoritma transformacije teksta, koji se provodi po principu funkcionalnog prikaza, odnosno jedan tekstualni lanac uključen u područje definicije ovog algoritma je povezan s drugim lancem, što je rezultat transformacije: t 1 ®t 2. U ovom slučaju, domen definicije funkcije (algoritma) će biti jezik.

Gramatika jezika ovo su pravila koja generišu sve lance u jeziku. Odvojeni simbol abeceda je regularni izraz. Gramatike regularnog izraza su napisane kao program koji generiše niz znakova. Imenovanje regularni izrazi- postavite skup nizova koji čine jezik.

Preklapanje simbola

BS (backspace) znak omogućava štampaču da prepiše jedan znak. U ASCII-u je predviđeno dodavanje dijakritičkih znakova slovima na ovaj način, na primjer:

  • a BS "→ á
  • a BS `→ à
  • a BS ^ → â
  • o BS / → ø
  • c BS, → ç
  • n BS ~ → ñ

Bilješka: u starim fontovima, apostrof "je nacrtan sa kosom ulijevo, a tilda ~ je pomaknuta prema gore, tako da samo odgovaraju ulozi akuta i tilde na vrhu.

Ako je isti simbol postavljen na simbol, onda se postiže efekat bold, a ako se na znak stavi podvučena crta, onda se dobija podvučeni tekst.

  • a BS a → a
  • a BS _ → a

Bilješka: ovo se koristi na primjer u sistem pomoći covece.

Nacionalne ASCII varijante

Standard ISO 646 (ECMA-6) pruža mogućnost postavljanja nacionalnih znakova na svoje mjesto @ [ \ ] ^ ` { | } ~ ... Pored ovoga, na mestu # može se smjestiti £ , i na mjestu $ - ¤ ... Ovaj sistem je veoma pogodan za evropske jezike gde je potrebno samo nekoliko dodatnih znakova. ASCII verzija bez nacionalnih znakova naziva se US-ASCII ili "Međunarodna referentna verzija".

Nakon toga se pokazalo prikladnijim za korištenje 8-bitnih kodiranja (kodnih stranica), gdje je donja polovina kodne tablice (0-127) okupirana US-ASCII znakovima, a gornja (128-255) - dodatni karakteri, uključujući skup nacionalnih simbola. Dakle, gornja polovina ASCII tablice, prije širokog usvajanja Unicodea, aktivno se koristila za predstavljanje lokaliziranih znakova, slova lokalnog jezika. Odsutnost uniformni standard Postavljanje ćiriličkih znakova u ASCII tablicu izazvalo je mnoge probleme sa kodiranjem (KOI-8, Windows-1251 i drugi). Drugi jezici s nelatinskim pismom također su patili od prisustva nekoliko različitih kodiranja.

.0 .1 .2 .3 .4 .5 .6 .7 .8 .9 .A .B .C .D .E .F
0. NUL SOM EOA EOM EQT WRU RU BELL BKSP Ht LF VT FF CR SO SI
1. DC 0 DC 1 DC 2 DC 3 DC 4 ERR SYNC LEM S 0 S 1 S 2 S 3 S 4 S 5 S 6 S 7
2.
3.
4. BLANK ! " # $ % & " ( ) * + , - . /
5. 0 1 2 3 4 5 6 7 8 9 : ; < = > ?
6.
7.
8.
9.
A. @ A B C D E F G H I J K L M N O
B. P Q R S T U V W X Y Z [ \ ]
C.
D.
E. a b c d e f g h i j k l m n o
F. str q r s t u v w x y z ITD DEL

Na onim računarima gdje je minimalna adresabilna jedinica memorije bila 36-bitna riječ, u početku su korišteni 6-bitni znakovi (1 riječ = 6 znakova). Nakon prelaska na ASCII na takvim računarima, počeli su da stavljaju ili 5 sedmobitnih karaktera u jednu reč (1 bit je ostao suvišan), ili 4 devetobitna znaka.

ASCII kodovi se takođe koriste za identifikaciju pritisnutog tastera tokom programiranja. Za standardnu ​​QWERTY tastaturu, tabela kodova izgleda ovako:

[8-bitna kodiranja: ASCII, KOI-8R i CP1251] Prve tabele skupova znakova kreirane u SAD-u nisu koristile osmi bit u bajtu. Tekst je predstavljen kao niz bajtova, ali osmi bit nije uzet u obzir (koristio se u servisne svrhe).

Općeprihvaćeni standard je postao tabela ASCII (American Standard Kod za razmjenu informacija). Prva 32 ASCII znaka (00 do 1F) korištena su za znakove koji se ne mogu ispisati. Dizajnirani su za kontrolu uređaja za štampanje i slično. Ostatak - od 20 do 7F - su normalni (štampavi) znakovi.

Tabela 1 - ASCII kodiranje

decHexoktCharOpis
0 0 000 null
1 1 001 početak naslova
2 2 002 početak teksta
3 3 003 kraj teksta
4 4 004 kraj prenosa
5 5 005 upit
6 6 006 priznati
7 7 007 zvono
8 8 010 backspace
9 9 011 horizontalni jezičak
10 A 012 nova linija
11 B 013 vertikalna kartica
12 C 014 nova stranica
13 D 015 povrat kočije
14 E 016 prebaciti se
15 F 017 prebaciti se
16 10 020 bijeg podatkovne veze
17 11 021 kontrola uređaja 1
18 12 022 kontrola uređaja 2
19 13 023 kontrola uređaja 3
20 14 024 kontrola uređaja 4
21 15 025 negativno priznanje
22 16 026 sinhroni mirovanje
23 17 027 kraj trans. blok
24 18 030 otkaži
25 19 031 kraj medija
26 1A 032 zamjena
27 1B 033 bijeg
28 1C 034 separator fajlova
29 1D 035 separator grupe
30 1E 036 separator zapisa
31 1F 037 separator jedinice
32 20 040 svemir
33 21 041 !
34 22 042 "
35 23 043 #
36 24 044 $
37 25 045 %
38 26 046 &
39 27 047 "
40 28 050 (
41 29 051 )
42 2A 052 *
43 2B 053 +
44 2C 054 ,
45 2D 055 -
46 2E 056 .
47 2F 057 /
48 30 060 0
49 31 061 1
50 32 062 2
51 33 063 3
52 34 064 4
53 35 065 5
54 36 066 6
55 37 067 7
56 38 070 8
57 39 071 9
58 3A 072 :
59 3B 073 ;
60 3C 074 <
61 3D 075 =
62 3E 076 >
63 3F 077 ?
decHexoktChar
64 40 100 @
65 41 101 A
66 42 102 B
67 43 103 C
68 44 104 D
69 45 105 E
70 46 106 F
71 47 107 G
72 48 110 H
73 49 111 I
74 4A 112 J
75 4B 113 K
76 4C 114 L
77 4D 115 M
78 4E 116 N
79 4F 117 O
80 50 120 P
81 51 121 Q
82 52 122 R
83 53 123 S
84 54 124 T
85 55 125 U
86 56 126 V
87 57 127 W
88 58 130 X
89 59 131 Y
90 5A 132 Z
91 5B 133 [
92 5C 134 \
93 5D 135 ]
94 5E 136 ^
95 5F 137 _
96 60 140 `
97 61 141 a
98 62 142 b
99 63 143 c
100 64 144 d
101 65 145 e
102 66 146 f
103 67 147 g
104 68 150 h
105 69 151 i
106 6A 152 j
107 6B 153 k
108 6C 154 l
109 6D 155 m
110 6E 156 n
111 6F 157 o
112 70 160 str
113 71 161 q
114 72 162 r
115 73 163 s
116 74 164 t
117 75 165 u
118 76 166 v
119 77 167 w
120 78 170 x
121 79 171 y
122 7A 172 z
123 7B 173 {
124 7C 174 |
125 7D 175 }
126 7E 176 ~
127 7F 177 DEL

Kao što možete lako vidjeti, ovo kodiranje sadrži samo latinična slova, i to ona koja se koriste u engleskom jeziku. Tu su i aritmetički i drugi uslužni simboli. Ali ne postoje ruska slova, pa čak ni posebna latinična slova za njemački ili francuski. Ovo je lako objasniti - kodiranje je razvijeno posebno kao američki standard. Kada su kompjuteri počeli da se koriste širom sveta, postalo je neophodno kodiranje drugih simbola.

Za to je odlučeno da se koristi osmi bit u svakom bajtu. Tako je bilo dostupno još 128 vrijednosti (od 80 do FF), koje su se mogle koristiti za kodiranje znakova. Prva od osmobitnih tabela je "prošireni ASCII" ( Prošireni ASCII) - uključene različite opcije latinični znakovi koristi se u nekim jezicima zapadne Evrope. Sadržao je i druge dodatne simbole, uključujući pseudo grafiku.

Pseudo-grafički znakovi dozvoljavaju, samo prikazom tekstualni znakovi, pružaju neki privid grafike. Uz pomoć pseudo-grafike, na primjer, program za kontrolu FAR fajlovi Menadžer.

U proširenoj ASCII tabeli nije bilo ruskih slova. U Rusiji (bivši SSSR) i drugim državama stvorena su vlastita kodiranja koja su omogućila predstavljanje specifičnih „nacionalnih“ znakova u 8-bitnim tekstualnim datotekama - latinična slova poljskog i češkog jezika, ćirilica (uključujući ruska slova ) i druga pisma.

U svim kodiranjima koja su postala široko rasprostranjena, prvih 127 znakova (to jest, vrijednosti bajtova s ​​osmim bitom jednakim 0) poklapaju se sa ASCII. Dakle, ASCII datoteka radi u bilo kojem od ovih kodiranja; pisma engleskog jezika predstavljeni su na isti način.

Organizacija ISO(Međunarodna organizacija za standardizaciju) usvojila je grupu standarda ISO 8859... Definira 8-bitna kodiranja za različite grupe jezicima. Dakle, ISO 8859-1 je prošireni ASCII, tabela za Sjedinjene Države i Zapadnu Evropu. A ISO 8859-5 je tabela za ćirilicu (uključujući ruski).

Međutim, iz istorijskih razloga, ISO 8859-5 kodiranje se nije uhvatilo. U stvarnosti, za ruski jezik se koriste sljedeća kodiranja:

Kodna stranica 866 ( CP866), zvani “DOS”, zvani “alternativno GOST kodiranje”. Bio je u širokoj upotrebi do sredine 90-ih; sada se koristi u ograničenoj mjeri. Praktično se ne koristi za distribuciju tekstova na Internetu.
- KOI-8. Razvijen 70-ih i 80-ih godina. To je općeprihvaćeni standard za prijenos mail poruka na ruskom Internetu. Takođe se široko koristi u operativni sistemi Unix porodice, uključujući Linux. Zove se verzija KOI-8, dizajnirana za ruski jezik KOI-8R; postoje verzije za druge ćiriličke jezike (na primjer, KOI8-U je opcija za ukrajinski jezik).
- Šifra 1251, CP1251, Windows-1251. Developed by od strane Microsofta za podršku ruskog jezika u Windows-u.

Glavna prednost CP866 bila je očuvanje pseudografskih znakova na istim mjestima kao u proširenom ASCII-u; dakle, strano tekstualni programi na primjer čuveni Norton Commander. Danas se CP866 koristi za Windows programe koji rade u tekstualnim prozorima ili tekstualnom režimu preko celog ekrana, uključujući FAR Manager.

CP866's Lyrics poslednjih godina su prilično rijetke (ali se koriste za kodiranje ruskih imena datoteka u Windows-u). Stoga ćemo se detaljnije zadržati na dva druga kodiranja - KOI-8R i CP1251.



Kao što možete vidjeti, u tablici kodiranja CP1251 ruska slova su raspoređena po abecednom redu (osim, međutim, slova E). Zahvaljujući ovoj lokaciji kompjuterski programi vrlo je lako sortirati po abecednom redu.

Ali u KOI-8R, redoslijed ruskih slova izgleda nasumičan. Ali zapravo nije.

Mnogi stariji programi izgubili su 8. bit prilikom obrade ili prijenosa teksta. (Sada su takvi programi praktički "izumrli", ali su kasnih 80-ih - ranih 90-ih bili široko rasprostranjeni). Da biste dobili 7-bitnu vrijednost od 8-bitne vrijednosti, oduzmite 8 od najznačajnije cifre; na primjer E1 postaje 61.

Sada uporedite KOI-8R sa ASCII tabela(Tabela 1). Videćete da su ruska slova jasno usklađena sa latiničnim. Ako osmi bit nestane, mala ruska slova pretvaraju se u velika latinična slova, a velika ruska slova pretvaraju se u mala latinična slova. Dakle, E1 u KOI-8 je rusko "A", dok je 61 u ASCII latinično "a".

Dakle, KOI-8 vam omogućava da sačuvate čitljivost ruskog teksta dok gubite 8. bit. “Zdravo svima” postaje “pRIWET WSEM”.

V novije vrijeme i abecedni red raspored znakova u tablici kodiranja i čitljivost sa gubitkom 8. bita izgubili su odlučujuću važnost. Osmi dio savremenih kompjutera se ne gubi tokom prijenosa ili obrade. Sortiranje po abecednom redu zasniva se na kodiranju, a ne na jednostavnom poređenju kodova. (Usput, CP1251 kodovi nisu potpuno abecedni - slovo E nije na svom mjestu).

Zbog činjenice da postoje dva uobičajena kodiranja, kada radite sa Internetom (pošta, pregledavanje web stranica), ponekad možete vidjeti besmislen skup slova umjesto ruskog teksta. Na primjer, "Ja sam SBUFEMHEL". Ovo su samo riječi "s poštovanjem"; ali su bili kodirani u CP1251 kodiranju, a kompjuter je dekodirao tekst prema tabeli KOI-8. Ako su iste riječi, naprotiv, kodirane u KOI-8, a kompjuter je dekodirao tekst prema tabeli CP1251, rezultat će biti “U HČBCEOJEN”.

Ponekad se desi da kompjuter uopšte dešifruje slova ruskog jezika prema tabeli koja nije namenjena ruskom jeziku. Tada se umjesto ruskih slova pojavljuje besmislen skup simbola (na primjer, latinična slova istočnoevropskih jezika); često se nazivaju "krokozijabre".

U većini slučajeva savremeni programi nositi se s određivanjem kodiranja internetskih dokumenata ( emailovi i web stranice) sami. Ali ponekad "zapadnu", i tada možete vidjeti čudne sekvence ruskih slova ili "krokozyabra". U pravilu, da bi se na ekranu prikazao pravi tekst, dovoljno je ručno odabrati kodiranje u meniju programa.

Za članak su korištene informacije sa stranice http://open-office.edusite.ru/TextProcessor/p5aa1.html.

Materijal preuzet sa sajta:

Kodiranje teksta: ASCII i Unicode (UTF-16)

Osoba lako percipira tekst. Naš mozak svakodnevno obrađuje ogromne količine teksta. Za razliku od nas, procesor računara može raditi samo sa brojevima. Stoga su svi tekstualni podaci u memoriji računara predstavljeni brojevima. Ali prije detaljna diskusija U ovom trenutku, prisjetimo se kako je memorija računara organizirana.

Računarska memorija je niz bitova. Bit je najmanja jedinica informacija koja može pohraniti dvije vrijednosti: nulu ili jedan. One. svi podaci koje kompjuter može proizvesti (brojevi, tekst, audio, video) je niz nula i jedinica.

Bit je premali. Stoga se bitovi spajaju u bajtove. Postoji osam bitova u jednom bajtu. Svaki bajt ima svoju adresu. To je bajt koji je minimalna jedinica kojoj procesor može pristupiti - procesor ne može pristupiti pojedinačnim bitovima, samo preko odgovarajućih bajtova. Pogledajmo mali komad kompjuterske memorije:

01001000 01000101 01001011 01001011 01001111 00100001

Adrese bajtova su prikazane na vrhu, a vrijednosti pohranjene u ovim adresama prikazane su na dnu. U stvarnosti, takve adrese ne postoje, budući da savremeni računari rade sa ogromnim adresnim prostorima. Adrese u modernim računarima pišu se ovako: 0x01328921. Adrese se pišu u heksadecimalnom formatu.

Jedan bajt može pohraniti 256 vrijednosti - 28 = 256. Raspon vrijednosti: od nule do 255 (za neoznačene brojeve), ili od -128 do 127 (za predpisane brojeve). Heksadecimalni maksimalna vrijednost bajtovi - 0xff. Obratite pažnju na upotrebljivost heksadecimalni sistem računanje: dvije cifre su potrebne za pisanje bilo koje jednobajtne vrijednosti. Pogledajmo sve opsege jednog bajtnog broja tri sistema računanje:

00000000 ... 11111111

Procesor sve brojeve vidi u binarnom obliku, ali može da ih konvertuje u druge sisteme brojeva, tako da nam je zgodno da ih čitamo. Pravila konverzije između različiti sistemi računajući o čemu smo razgovarali u prethodnim lekcijama. Gore navedeni niz bajtova može se predstaviti na sljedeći način:

0x48 0x45 0x4b 0x4b 0x4f 0x21 // heksadecimalno

Računaru je pogodnije da koristi binarni oblik, a nama - heksadecimalni ili decimalni.

ASCII kodiranje

Za predstavljanje teksta u brojevima, svako slovo je dodijeljeno numerička vrijednost- kodiraju značenja slova. Dodjela svim slovima jedinstvena vrijednost, dobijamo kodiranje (skup znakova, endoding). Ali nema smisla koristiti vlastito kodiranje - možete ga koristiti samo u svom programu. On ovog trenutka najčešće korišteno kodiranje je ASCII.



Prvobitno je jedan ASCII znak bio 7 bita. Ali kada se 8-bitni bajt proširio (da, bilo je bajtova različite veličine), tada je ASCII proširen na osam bitova. 7-bitno kodiranje je upola manje od osmobitnog kodiranja: 27 = 128< 28=256.

Dakle, u početku je bilo 128 vrijednosti u ASCII kodiranju: od 0 do 127 (0x00 do 0x7f). Ovo je dovoljno za kodiranje svih slova latinične abecede, arapskih brojeva i niza drugih znakova.

7-bitni ASCII kodiranje je osnova za sva trenutno uobičajena kodiranja i izuzetno je važno u programiranju. Stoga ćemo se upoznati sa specifičnim vrijednostima:

0 - nula. To nije broj u prikazanom tekstu. TO ovaj kod nijedan simbol nije priložen. One. nikada nećete videti nultu reprezentaciju na ekranu. Međutim, nula je vrlo važna u programiranju i pohranjivanju teksta. Za šta se koristi ovaj kod, saznaćemo kasnije.

32 je prostor.

48 - nulti kod. Kada na ekranu monitora vidimo nulu, u memoriji računara ovaj simbol je predstavljen brojem 48.

57 - devet.

65 - kurzivno slovo A (engleska abeceda).

90 - veliko slovo Z.

97 - malo slovo a.

122 je malo slovo z.

Vratimo se na redoslijed bajtova o kojem smo ranije govorili i pokušajmo upariti vrijednost svakog sa ASCII kodom:

01001000 01000101 01001011 01001011 01001111 00100001 // binarni (binarni) oblik

72 69 76 76 79 33 // decimalni oblik

ZDRAVO! // ASCII znakovi

Oh, čudo! Dobili smo tekst "ZDRAVO!"

Računar vidi samo niz bajtova na koje se može pozvati po njihovim adresama. Vidimo kako primarni brojevi, i tekst, ako pogledate ove brojeve u ASCII kodiranju.

Prošireno ASCII kodiranje

Sa pojavom osmobitnog kodiranja, druge abecede su takođe mogle da kodiraju u ASCII. Postoji mnogo proširenih ASCII kodiranja - postoje verzije za mnoge nacionalne abecede. Štaviše, prva polovina kodiranja (vrijednosti od nule do 127) je svugdje ista.

Rusko pismo (ćirilica) kodirano je imenom windows-1251. Još jedna popularna ASCII verzija - windows-1252 - je kodiranje za zapadnoevropske jezike (kodira slova specifična za francusko i njemačko pismo). Inače, tekst koji sada čitate je kodiran u windows-1251.

Nije nas briga kako su ruska slova (i engleska takođe) kodirana u windows-1251 - ne moramo znati konkretna značenja. Po potrebi možete pronaći puna lista vrijednosti znakova za windows-1251 u pretraživačima.

Kodiranje brojeva u tekstu

U praksi, ne morate znati kodirana značenja slova. Ali u isto vrijeme, neophodno je zapamtiti kodirane vrijednosti brojeva. U ASCII-u brojevi imaju kodove od 48 do 57,48 je nula, 49 je jedan... 57 je devet. Da vas podsjetim da je prvih 128 vrijednosti isto u svim kodovima, tako da su kodovi brojeva svuda isti. A ovo je, kažem vam, jako cool. Zašto trebate znati kodove brojeva i kako je to povezano sa kreiranjem igrica?

Recimo da u našoj igri trebamo prikazati vrijednosti korisničkih jedinica. Interno, ovo je prost broj, predstavljen promenljivom. Ali da bi korisnik mogao vidjeti ovaj broj, potrebno ga je pretvoriti u tekst, koji će biti prikazan na ekranu. Stoga je prilikom kreiranja igre imperativ napisati kod koji pretvara brojeve u tekst.

Na primjer, uzmite u obzir dvije vrijednosti: na početku igre korisnik nema jedinica, a nakon nekog vremena izgradio je pet.

Prvo, korisnik treba da prikaže znak 0. Da biste to uradili, potrebno je da koristite kodiranu vrednost ovog znaka - 48. Zatim korisnik treba da prikaže znak 5 čiji je kod 53. Ovde možete videti zanimljiva karakteristika: znakovni kod cifre se razlikuje od stvarne vrijednosti za 48. Stoga, za jednocifrene (i samo jednocifrene) brojeve možemo koristiti sljedeći kod:

int var = GetUnitNumber (); // saznati broj jedinica

char izlaz = var + 48;

Sada možete prikazati varijabilni izlaz na ekranu. Ostaje da se reši samo jedan problem: u stvarnim situacijama jednocifreni brojevi se veoma retko koriste. Na primjer, u Company of heroes, igrač ima više od 15 jedinica pod svojom komandom, u Age of Empires - više od 50. U ostalim igrama situacija je slična. U pucačima ćete možda morati prikazati broj metaka i zdravlje (čije su vrijednosti gotovo uvijek veće od 9). Naravno, prilikom kreiranja naše igre morat ćemo prikazati višecifrene brojeve. Razmotrit ćemo izlaz višecifrenih brojeva u sljedećoj lekciji, ali sada ćemo se vratiti na razmatranje kodiranja.

Kodiranje Unicode - Unicode

Jedan bajt može imati samo 256 vrijednosti. To znači da se 256 znakova može kodirati u ASCII: brojevi, slova, ikone, znakovi interpunkcije i drugi različiti simboli. Istovremeno, postoje skripte u kojima postoji mnogo više znakova, na primjer, kineski ili japanski znakovi.

Da bi se riješio ovaj (i neki drugi) problem, ranih devedesetih stvoreno je Unicode kodiranje. Prvobitno su svi unikod znakovi bili dva bajta. U skladu s tim, 216 = 65536 vrijednosti može biti kodirano u unikodu. Prostor koda je tada proširen na preko milion karaktera. Ovo je rezultiralo nekoliko unicode reprezentacija.

Najpopularnije unicode reprezentacije su dvije: UTF-8 - koristi se na Internetu i UTF-16 - koristi se u Windowsima (Windows XP, Windows Vista, Windows 7).

U kontekstu kreiranja igara, nije važno kako su svi likovi kodirani u različitim Unicode prikazima. Ali važno je da su u svim reprezentacijama arapski brojevi kodirani na isti način kao u ASCII.

Postoje dvije verzije UTF-16: UTF-16LE (little-endian) - kodiranje sa obrnutim redosledom bajtova i UTF-16BE (big-endian) - big endian kodiranje. Na Windows-u se, naravno, koristi UTF16-LE.

Kod Unicode karaktera je označen na sljedeći način: U + hhhh (četiri heksadecimalne cifre, h od heksadecimalne). Na primjer, U + 221A je simbol kvadratni korijen - √.

Neki od znakova u UTF-16 su kodirani u dva bajta (prvih 63 hiljade). Ostali znakovi su kodirani surogat parovima. Budući da to nije previše važno za kreiranje igara, neću se detaljnije zadržavati na surogat parovima.

U UTF-8, prvih 128 znakova je kodirano u jednom bajtu. Ostatak znakova se može kodirati sa nekoliko bajtova (od dva do četiri).

I još jedna stvar (najvažnija): svi simboli svih modernih i mnogo mrtvih skripti su kodirani u unicode-u, plus znakovi iz različitim oblastima nauka i kultura (matematički i ekonomski simboli, notni zapisi i još mnogo toga). Iz tog razloga morate koristiti Unicode.

Još jednom ponavljam da poznavanje Unicode standarda i karakteristika njegovih različitih reprezentacija ne pomaže mnogo u takvoj temi kao što je kreiranje igara, tako da ćete dalje upoznavanje Unicodea morati nastaviti sami. Kao i obično, standard će pružiti neprocjenjivu pomoć u ovom pitanju.

Kodiranje teksta u Microsoft Windows(Windows XP, Windows Vista, Windows 7)

U modernom Windows verzije Postoje dva načina za predstavljanje teksta: UTF-16 i kodne stranice (uglavnom osmobitna kodiranja). Glavni način je Unicode. Kodne stranice su potrebne za kompatibilnost sa starim aplikacijama (u Windows 95, Windows 98 - uglavnom se koristio ASCII). Također, unicode ne razumije baš jedan važan program- konzola.

Nemojte da vas zbuni novi termin- kodna stranica. U prozorima se sva kodiranja (skupovi znakova ili kodiranja) nazivaju tako. One. koncept kodiranja je ekvivalentan kodnoj stranici.

Odmah ću napraviti primjedbu koju je bolje zapamtiti. Windows ima jasno razdvajanje: ovdje je unicode (UTF-16LE) i ovdje su svi ostali kodiranja. I unicode i druga kodiranja u Windows-u se zovu kodne stranice, ali ću primijeniti ovaj termin (kodirane stranice) na sva kodiranja osim unicode-a.

Kad smo pisali konzolni programi, tekst je izašao pomoću kodne stranice windows-1252. Zbog toga smo morali pozvati setlocale (mjenja kodnu stranicu u windows-1251):

Ova funkcija mijenja lokalitet.

Lokal - lokalitet

Windows ima takvu stvar kao što je Locale. Ovdje nisam sasvim korektno koristio paus papir ove riječi - lokalitet, ali je, po mom mišljenju, prilično prostran da uklopi cijelo značenje pojma Locale. Locale se prevodi u lokalne karakteristike. One. ovo su neki parametri koji se koriste na ovom konkretnom mjestu (regija, država). setlocale mijenja ove karakteristike:

setlocale (LC_CTYPE, "ruski");

U ovom izazovu, lokalitet se mijenja u ruski. Stoga Windows može koristiti naše lokalne specifičnosti: prikaz datuma i vremena, sistem mjerenja, valutu i naravno kodnu stranicu.

Prvi parametar ove funkcije govori koje kategorije lokalne karakteristike može promijeniti. Možete promijeniti samo kodnu stranicu (LC_CTYPE), možete promijeniti format datuma i vremena (LC_TIME), ili možete promijeniti sve kategorije (LC_ALL, all - all).

Nazad na kodiranja.

Istovremeno se može koristiti samo jedna kodna stranica, dok se Unicode može koristiti i sa znakovima kodne stranice u programu, pošto se Unicode izdvaja od svih ostalih kodnih stranica. Pokušajte uvijek koristiti Unicode u svojim programima. Ima smisla koristiti samo kodne stranice u konzoli.

Top srodni članci