Kako postaviti pametne telefone i računala. Informativni portal

ascii kodiranje. Sustavi kodiranja teksta

Skup simbola koji se koriste za pisanje teksta naziva se abecednim redom.

Broj znakova u abecedi je vlast.

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

gdje je N kardinalnost abecede (broj simbola),

b je broj bitova (informacijska težina simbola).

Gotovo svi potrebni znakovi mogu se smjestiti u abecedu kapaciteta 256 znakova. Ova abeceda se zove dostatan.

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

8-bitna mjerna jedinica dobila je ime 1 bajt:

1 bajt = 8 bita.

Binarni kod svakog znaka u tekstu računala zauzima 1 bajt memorije.

Kako su tekstualne informacije predstavljene u memoriji računala?

Pogodnost bajt-po-bajt kodiranja znakova je očigledna, budući da je bajt najmanji adresabilni dio memorije i, prema tome, procesor može pristupiti svakom znaku zasebno prilikom obrade teksta. S druge strane, 256 znakova sasvim je dovoljno za predstavljanje najrazličitijih znakovnih informacija.

Sada se postavlja pitanje koji osmobitni binarni kod staviti u korespondenciju sa svakim znakom.

Jasno je da je ovo uvjetna stvar, možete smisliti mnogo načina za kodiranje.

Svi znakovi računalne abecede označeni su brojevima od 0 do 255. Svaki broj odgovara osmoznamenkasti binarni kod od 00000000 do 11111111. Ovaj kod je jednostavno serijski broj znaka u binarni sustav računanje.

Tablica u kojoj su svi znakovi računalne abecede dodijeljeni serijski brojevi naziva se tablica kodiranja.

Za različiti tipovi Računalo koristi različite tablice kodiranja.

Tablica je postala međunarodni standard za osobna računala. ASCII(izgovara se asci) (američki standardni kod za razmjenu informacija).

Tablica ASCII kodova podijeljena je u dva dijela.

Samo je prva polovica tablice međunarodni standard, tj. znakova s ​​brojevima iz 0 (00000000), do 127 (01111111).

Struktura ASCII tablice kodiranja

Serijski broj

Kodirati

Simbol

0 - 31

00000000 - 00011111

Znakovi s brojevima od 0 do 31 nazivaju se kontrolni znakovi.
Njihova funkcija je upravljanje procesom prikazivanja teksta na ekranu ili ispisa, arhiviranja zvučni signal, označavanje teksta itd.

32 - 127

00100000 - 01111111

Standardni dio tablice (engleski). Ovo uključuje mala i velika slova latinica, decimalne znamenke, interpunkcijski znakovi, sve vrste zagrada, reklamni i drugi simboli.
Znak 32 je razmak, tj. prazno mjesto u tekstu.
Sve ostalo odražavaju se određenim znakovima.

128 - 255

10000000 - 11111111

Alternativni dio tablice (ruski).
Druga polovica kodna tablica ASCII, nazvan kodna stranica (128 kodova koji počinju s 10000000 i završavaju s 11111111), može imati razne opcije, svaka opcija ima svoj broj.
Kodna stranica prvenstveno se koristi za prilagođavanje nacionalnih pisama osim latinice. U ruskim nacionalnim kodovima, znakovi ruske abecede smješteni su u ovaj dio tablice.

Prva polovica tablice ASCII kodova


Skrećem vam pozornost na činjenicu da su u tablici kodiranja slova (velika i mala) raspoređena abecednim redom, a brojevi su poredani uzlaznim redoslijedom vrijednosti. Ovo poštivanje leksikografskog reda u rasporedu znakova naziva se načelo sekvencijalnog kodiranja abecede.

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

Druga polovica tablice ASCII kodova


Nažalost, trenutno postoji pet različitih kodiranja ćirilice (KOI8-R, Windows. MS-DOS, Macintosh i ISO). Zbog toga se često javljaju problemi s prijenosom ruskog teksta s jednog računala na drugo, s jednog programski sustav drugome.

Kronološki, jedan od prvih standarda za kodiranje ruskih slova na računalima bio je KOI8 ("Information Exchange Code, 8-bit"). Ovo kodiranje korišteno je 70-ih godina prošlog stoljeća na računalima serije EC, a od sredine 80-ih počelo se koristiti u prvim rusificiranim verzijama operativnog sustava UNIX.

Od početka 90-ih, vremena dominacije MS DOS operativnog sustava, kodiranje ostaje CP866 ("CP" je kratica za "Code Page", "kodna stranica").

Računala Jabuka djelujući pod operativnim Mac sustavi OS, koriste vlastito Mac kodiranje.

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

Trenutno je najčešći Microsoftovo kodiranje Windows, skraćeno CP1251.

Od kraja 90-ih godina problem standardizacije kodiranja znakova riješen je uvođenjem novog međunarodnog standarda tzv. Unicode. Ovo je 16-bitno kodiranje, tj. ima 2 bajta memorije po znaku. Naravno, u ovom slučaju količina zauzete memorije povećava se 2 puta. Ali takva kodna tablica dopušta uključivanje do 65536 znakova. Puna specifikacija Unicode standard uključuje sve postojeće, izumrle i umjetno stvorene abecede svijeta, kao i mnoge matematičke, glazbene, kemijske i druge simbole.

Pokušajmo pomoću ASCII tablice zamisliti kako će riječi izgledati u memoriji računala.

Interni prikaz riječi u memoriji računala

Ponekad se dogodi da se tekst koji se sastoji od slova ruske abecede, primljen s drugog računala, ne može pročitati - na zaslonu monitora vidljiva je neka vrsta "abrakadabre". To je zbog činjenice da računala koriste različita kodiranja znakova ruskog jezika.

Kodiranje teksta

Kodiranje teksta je uspostavljanje tablice korespondencije između kodiranog znaka i kombinacije stanja bitova, odnosno proces kodiranja je da se svakom znaku dodjeljuje jedinstveni kod. Trenutno postoje različiti sustavi 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 informacije = 7 bita. Ako znakove smatramo mogućim događajima (vidi predavanje 1), tada možemo izračunati broj znakova koji se mogu kodirati:

2*26-slova

32 različita znaka

34-uslužni znakovi

128 znakova

Dakle, broj kodiranih znakova je ograničen, tako da je nemoguće kodirati slova ruske abecede u sedmobitnom sustavu kodiranja. Pojavio se zadatak prikazati i ruske i latinske znakove u isto vrijeme. Načini rješavanja ovog problema su transliteracija i proširenje kodiranja.

Osmobitni sustavi kodiranja:

Ako je najznačajniji bit koda 0, tada je sustav kodiranja isti kao ASCII, ako je najznačajniji bit -1, tada se uvode dodatne kodne stranice.

U Rusiji je stvoren jedan od tih sustava KOI-8, nedostatak mu je što ruska slova nisu poredana abecednim redom.Osim toga, postoje SR-866, SR-1251, ANSI, koji se koriste u operativnom sustavu Windows.

Velike kodne stranice:

Za kodiranje jednog znaka potrebno je 16 bita.

Naravno, s takvim sustavom kodiranja nema problema s nemogućnošću kodiranja određenog znaka, budući da 65535 više nego pokriva raznolikost korištenih znakova, no UNICODE ima još jedan nedostatak: prilikom prevođenja teksta iz ASCII u UNICODE, veličina računala tekst se značajno povećava. U tom smislu, razvijena je druga klasa sustava kodiranja korištenjem varijabilni broj bit za kodiranje znakova.

Ako je najznačajniji bit koda nula(bit8=0), tada je sustav kodiranja isti kao ASCII, sa svakim od prvih 128 znakova kodiranih kao jedan bajt.
Ako je viši jednako jedan(bit8=1, bit7=0), onda se sljedećih 16384 znaka kodira slično UNICODE-u, to jest, dva bajta se koriste za kodiranje svakog znaka. Preostali znakovi (65535-128-16384=49023) su kodirani s tri bajta.

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


S jedne strane, računalni je tekst abecedni, u kojem je tekst predstavljen kao niz znakova ( abecedni pristup). Drugi pristup je da se računalni tekst već smatra složenom strukturom koja se sastoji od skupa svih nizova znakova.

t:(1, 2, 3...k) je jedan od takvih lanaca duljine k.

Ovaj pristup omogućuje razumijevanje algoritma transformacije teksta, koji se provodi prema principu funkcionalnog preslikavanja, odnosno, jedan tekstualni lanac uključen u područje definicije ovog algoritma dodjeljuje se drugom lancu, što je rezultat transformacije: t 1 ®t 2 . U ovom slučaju opseg funkcije (algoritma) bit će jezik.

Gramatika jezika to su pravila koja generiraju sve lance u jeziku. jedan simbol abeceda je regularni izraz. Gramatike temeljene na regularnim izrazima napisane su kao program koji generira niz znakova. Svrha regularni izrazi– postavite skup lanaca koji čine jezik.

Prekrivanje simbola

Zahvaljujući znaku BS (back step), pisač može ispisati jedan znak na drugom. ASCII je omogućio dodavanje dijakritičkih znakova slovima na ovaj način, na primjer:

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

Bilješka: u starijim fontovima, apostrof " je bio nagnut ulijevo, a tilda ~ je bila pomaknuta prema gore, tako da su samo odgovarali ulozi naglaska i tilde na vrhu.

Ako se isti simbol postavi na simbol, tada se postiže učinak hrabar tip, a ako se preko znaka stavi podcrtano, onda se dobije podcrtani tekst.

  • a BS a → a
  • a BS_ → a

Bilješka: ovo se koristi, na primjer, u sustav pomoćičovjek.

Nacionalne varijante ASCII-ja

Norma ISO 646 (ECMA-6) predviđa mogućnost postavljanja nacionalnih simbola na mjesto @ [ \ ] ^ ` { | } ~ . Osim ovoga, na mjestu # može se postaviti £ , i na mjestu $ - ¤ . Ovaj sustav je vrlo prikladan za europske jezike gdje je potrebno samo nekoliko dodatnih znakova. Varijanta ASCII bez nacionalnih znakova naziva se US-ASCII ili "International Reference Version".

Kasnije se pokazalo da je prikladnije koristiti 8-bitna kodiranja (kodne stranice), gdje je donja polovica kodne tablice (0-127) zauzeta US-ASCII znakovima, a gornja polovica (128-255) po dodatni znakovi, uključujući skup nacionalnih znakova. Stoga se gornja polovica ASCII tablice, prije širokog prihvaćanja Unicodea, intenzivno koristila za predstavljanje lokaliziranih znakova, slova lokalnog jezika. Odsutnost jedinstveni standard postavljanje ćiriličnih znakova u ASCII tablicu izazvalo je dosta problema s kodiranjem (KOI-8, Windows-1251 i drugi). Drugi jezici s nelatiničnim pismom također su patili zbog prisutnosti 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 EN ZVONO BKSP HT LF VT FF CR TAKO SI
1. DC 0 DC 1 DC 2 DC 3 DC 4 GREŠKA SINKRONIZACIJA LEM S0 S1 S2 S3 S4 S5 S6 S7
2.
3.
4. PRAZAN ! " # $ % & " ( ) * + , - . /
5. 0 1 2 3 4 5 6 7 8 9 : ; < = > ?
6.
7.
8.
9.
A. @ A B C D E F G H ja 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 ja j k l m n o
F. str q r s t u v w x g z ESC DEL

Na onim računalima gdje je minimalna adresabilna jedinica memorije bila 36-bitna riječ, isprva su korišteni 6-bitni znakovi (1 riječ = 6 znakova). Nakon prelaska na ASCII, takva su računala počela stavljati ili 5 sedmo-bitnih znakova u jednu riječ (1 bit je ostao suvišan) ili 4 devet-bitna znaka.

ASCII kodovi se također koriste za određivanje koja je tipka pritisnuta prilikom programiranja. Za standardnu ​​QWERTY tipkovnicu tablica kodova izgleda ovako:

[8-bitno kodiranje: ASCII, KOI-8R i CP1251] Prve tablice kodiranja stvorene u SAD-u nisu koristile osmi bit u bajtu. Tekst je predstavljen kao niz bajtova, ali osmi bit nije uzet u obzir (korišten je u službene svrhe).

Tablica je postala prihvaćeni standard. ASCII (američki standard Kod za razmjenu informacija). Prva 32 znaka ASCII tablice (00 do 1F) korištena su za neispisne znakove. Namijenjeni su za upravljanje uređajem za ispis i slično. Ostatak - od 20 do 7F - su obični (ispisivi) znakovi.

Tablica 1 - ASCII kodiranje

prošesterokutnilisCharOpis
0 0 000 ništavan
1 1 001 početak naslova
2 2 002 početak teksta
3 3 003 kraj teksta
4 4 004 kraj prijenosa
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 okomiti jezičak
12 C 014 nova stranica
13 D 015 povrat prtljage
14 E 016 pomaknuti se
15 F 017 pomaknuti 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 priznati
22 16 026 sinkroni prazan hod
23 17 027 kraj prev. blok
24 18 030 otkazati
25 19 031 kraj srednjeg
26 1A 032 zamjena
27 1B 033 pobjeći
28 1C 034 separator datoteka
29 1D 035 razdjelnik grupa
30 1E 036 razdjelnik zapisa
31 1F 037 separator jedinice
32 20 040 prostor
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 ?
prošesterokutnilisChar
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 ja
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 ja
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 g
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, u ovom kodiranju su zastupljena samo latinična slova i ona koja se koriste u engleskom jeziku. Tu su i aritmetički i drugi službeni simboli. Ali nema ruskih slova, pa čak ni posebnih latiničnih slova za njemački ili francuski. To je lako objasniti - kodiranje je razvijeno kao američki standard. Kako su se računala počela koristiti diljem svijeta, bilo je potrebno kodirati druge znakove.

Da bi se to postiglo, odlučeno je koristiti osmi bit u svakom bajtu. Dakle, bilo je dostupno još 128 vrijednosti (od 80 do FF), koje su se mogle koristiti za kodiranje znakova. Prva od osmobitnih tablica je "prošireni ASCII" ( prošireni ASCII) - uključene su razne opcije latinični znakovi koristi se u nekim zapadnoeuropskim jezicima. Imao je i druge dodatne znakove, uključujući pseudografiju.

Pseudografski simboli dopuštaju, samo prikazivanjem tekstualni znakovi, pružaju neki privid grafike. Uz pomoć pseudografike, na primjer, program za upravljanje FAR datoteke menadžer.

U proširenoj ASCII tablici nije bilo ruskih slova. U Rusiji (bivši SSSR) iu 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 druge abecede.

U svim kodiranjima koja su postala široko rasprostranjena, prvih 127 znakova (tj. vrijednosti bajtova s ​​osmim bitom jednakim 0) isti su kao ASCII. Dakle, ASCII datoteka radi u bilo kojem od ovih kodiranja; slova na engleskom prikazani su na isti način.

Organizacija ISO(International Standardization Organisation – Međunarodna organizacija za standarde) donijela je skupinu standarda ISO 8859. Definira 8-bitno kodiranje za različite grupe Jezici. Dakle, ISO 8859-1 je prošireni ASCII, tablica za SAD i Zapadnu Europu. A ISO 8859-5 je tablica za ćirilicu (uključujući ruski).

Međutim, zbog povijesnih razloga, ISO 8859-5 kodiranje nije zaživjelo. U stvarnosti se za ruski jezik koriste sljedeća kodiranja:

Kodna stranica 866 ( CP866), ona je također "DOS", ona je također "alternativno GOST kodiranje". Široko korišten do sredine 1990-ih; sada u ograničenoj upotrebi. Praktički se ne koristi za distribuciju tekstova na Internetu.
- KOI-8. Razvijen 70-ih i 80-ih. To je općeprihvaćeni standard za slanje e-mail poruka na ruskom internetu. Također se široko koristi u operativni sustavi obitelji Unix, uključujući Linux. Naziva se verzija KOI-8, dizajnirana za ruski jezik KOI-8R; postoje verzije za druge ćirilične jezike (na primjer, KOI8-U je varijanta za ukrajinski jezik).
- Kodna stranica 1251, CP1251, Windows-1251. Razvijen od strane Microsofta za podršku ruskog jezika u sustavu Windows.

Glavna prednost CP866 bila je očuvanje pseudografskih znakova na istim mjestima kao u Extended ASCII; dakle, strani tekstualni programi, primjerice, slavni Norton Commander. CP866 se trenutno koristi za Windows programe koji se izvode u tekstualnim prozorima ili u tekstualnom modu preko cijelog zaslona, ​​uključujući FAR Manager.

Tekstovi u CP866 posljednjih godina prilično su rijetki (ali se koristi za kodiranje ruskih naziva datoteka u sustavu Windows). Stoga ćemo se zadržati na dva druga kodiranja - KOI-8R i CP1251.



Kao što vidite, u tablici kodiranja CP1251 ruska su slova raspoređena abecednim redom (s izuzetkom, međutim, slova YO). Zahvaljujući ovoj lokaciji računalni programi Vrlo je lako sortirati po abecedi.

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

U mnogim starijim programima 8. bit se gubio prilikom obrade ili prijenosa teksta. (Sada su takvi programi praktički "izumrli", ali u kasnim 80-ima i ranim 90-ima bili su rašireni). Da biste dobili 7-bitnu vrijednost od 8-bitne vrijednosti, dovoljno je oduzeti 8 od više znamenke; na primjer, E1 postaje 61.

Sada usporedite KOI-8R s ASCII tablica(Stol 1). Vidjet ćete da su ruska slova u strogom skladu s latiničnima. Ako osmi bit nestane, mala ruska slova pretvaraju se u velika latinična slova, a velika ruska slova 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ćuje da zadržite čitljivost ruskog teksta uz gubitak 8. bita. “Pozdrav svima” postaje “pRIWET WSEM”.

U U zadnje vrijeme I redoslijed abecede raspored znakova u tablici kodiranja, a čitljivost gubitkom 8. bita izgubila je odlučujuću važnost. Osmi bit unutra moderna računala ne gubi se tijekom prijenosa ili obrade. A abecedno sortiranje vrši se uzimajući u obzir kodiranje, a ne jednostavnu usporedbu kodova. (Usput, kodovi CP1251 nisu potpuno abecedni - slovo Y nije na svom mjestu).

Zbog činjenice da su postojala dva uobičajena kodiranja, kada radite s Internetom (pošta, pregledavanje web stranica), ponekad možete vidjeti besmislen skup slova umjesto ruskog teksta. Na primjer, "Ja sam SBYFEMHEL". To su samo riječi "s poštovanjem"; ali su bili kodirani u CP1251 kodiranju, a računalo je dekodiralo tekst prema tablici KOI-8. Ako bi iste riječi bile, naprotiv, kodirane u KOI-8, a računalo dekodiralo tekst prema tablici CP1251, rezultat bi bio “U HCHBTSEOEN”.

Ponekad se dogodi da računalo dešifrira slova ruskog jezika, pa čak i prema tablici koja nije namijenjena ruskom jeziku. Tada se umjesto ruskih slova pojavljuje besmislen skup znakova (na primjer, latinična slova istočnoeuropskih jezika); često se nazivaju "crocos".

U većini slučajeva moderni programi nositi se s određivanjem kodiranja internetskih dokumenata ( elektronička pošta i web stranice) samostalno. Ali ponekad se "zakažu", i tada možete vidjeti čudne nizove ruskih slova ili "krokodila". U pravilu, za prikaz stvarnog teksta u takvoj situaciji dovoljno je ručno odabrati kodiranje u izborniku programa.

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

Materijal preuzet sa stranice:

Kodiranje teksta: ASCII i Unicode (UTF-16)

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

Memorija računala je niz bitova. Bit je najmanja jedinica informacije koja može pohraniti dvije vrijednosti: nulu ili jedinicu. Oni. svi podaci koje računalo može proizvesti (brojevi, tekst, audio, video) su niz nula i jedinica.

Bit je premali. Stoga se bitovi kombiniraju u bajtove. Postoji osam bitova u jednom bajtu. Svaki bajt ima svoju adresu. Upravo je bajt najmanja jedinica kojoj procesor može pristupiti – procesor ne može pristupiti pojedinačnim bitovima, već samo preko pripadajućih bajtova. Pogledajmo malo područje memorije računala:

01001000 01000101 01001011 01001011 01001111 00100001

Na vrhu su adrese bajtova, a na dnu su vrijednosti pohranjene na tim adresama. U stvarnosti, takve adrese ne postoje, budući da moderna računala rade s ogromnim adresnim prostorima. Adrese u modernim računalima 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 brojeve bez predznaka) ili od -128 do 127 (za brojeve s predznakom). U heksadecimalnom obliku maksimalna vrijednost bajtovi - 0xff. Obratite pozornost na upotrebljivost heksadecimalni sustav računanje: potrebne su dvije znamenke za pisanje bilo koje jednobajtne vrijednosti. Pogledajmo sve raspone jednobajtnog broja tri sustava računanje:

00000000 ... 11111111

Procesor vidi sve brojeve u binarnom obliku, ali ih može pretvoriti u druge brojevne sustave tako da nam je zgodno čitati ih. Pravila pretvorbe između raznih sustava o matematici smo govorili u prethodnim lekcijama. Slijed bajtova danih gore može se također predstaviti na sljedeći način:

0x48 0x45 0x4b 0x4b 0x4f 0x21 // heksadecimalni oblik

Za računalo je prikladnije koristiti binarni oblik, a za nas - heksadecimalni ili decimalni.

ASCII kodiranje

Za predstavljanje teksta kao brojeva, svako slovo je dodijeljeno brojčana vrijednost- kodirati značenja slova. Dodjela svih slova jedinstvena vrijednost, dobivamo kodiranje (skup znakova, endodiranje). Ali nema smisla koristiti vlastito kodiranje - možete ga koristiti samo u svom programu. Na ovaj trenutak ASCII kodiranje je najčešće korišteno.



Izvorno je jedan ASCII znak zauzimao 7 bita. Ali kada je 8-bitni bajt postao raširen (da, bilo je bajtova različite veličine), tada je ASCII proširen na osam bitova. 7-bitno kodiranje je dva puta manje od osam-bita: 27=128< 28=256.

Dakle, izvorno 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-bitno ASCII kodiranje je osnova za sva trenutno korištena kodiranja i izuzetno je važno u programiranju. Stoga ćemo se upoznati s određenim vrijednostima:

0 - nula. To nije broj u izlaznom tekstu. DO dati kod nema priloženog simbola. Oni. nikada nećete vidjeti prikaz nule na ekranu. Međutim, nula je vrlo važna u programiranju i pohrani teksta. Za što se ovaj kod koristi, saznat ćemo kasnije.

32 - prostor.

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

57 - devet.

65 - veliko slovo A (engleska abeceda).

90 je veliko slovo Z.

97 - malo slovo a.

122 je malo slovo z.

Vratimo se na niz bajtova o kojem smo ranije govorili i pokušajmo uskladiti vrijednost svakog s ASCII kodom:

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

72 69 76 76 79 33 // decimalni oblik

ZDRAVO ! // ASCII znakovi

O čudo! Imamo tekst "ZDRAVO!"

Računalo vidi samo niz bajtova, kojima može pristupiti putem njihovih adresa. Možemo vidjeti kako primarni brojevi, i tekst, ako pogledate ove brojeve u ASCII kodiranju.

Prošireno ASCII kodiranje (prošireni ASCII)

S pojavom osmobitnog kodiranja, i druge su se abecede mogle kodirati u ASCII. Postoji mnogo proširenih ASCII kodiranja - postoje verzije za mnoga nacionalna pisma. U ovom slučaju, prva polovica kodiranja (vrijednosti od nule do 127) svugdje je ista.

Ruska abeceda (ćirilica) kodirana je kodiranjem pod nazivom windows-1251. Druga popularna verzija ASCII - windows-1252 - je kodiranje za zapadnoeuropske jezike (kodira slova specifična za francusku i njemačku abecedu). Usput, tekst koji trenutno čitate je kodiran u Windows-1251.

Nije nam važno kako su ruska slova (i engleska također) kodirana u Windows-1251 - ne moramo znati određene vrijednosti. Ako je potrebno, možete pronaći puni popis vrijednosti znakova za windows-1251 u tražilicama.

Kodiranje brojeva u tekstu

U praksi nije potrebno znati kodirana značenja slova. Ali u isto vrijeme, neophodno je zapamtiti kodirana značenja brojeva. U ASCII, znamenke imaju kodove od 48 do 57. 48 je nula, 49 je jedan... 57 je devet. Podsjećam vas da su prvih 128 vrijednosti iste u svim kodovima, tako da su šifre znamenki svugdje iste. A ovo je, kažem vam, jako cool. Zašto trebate znati šifre brojeva i kako se to odnosi na stvaranje igara?

Recimo da u našoj igrici moramo prikazati vrijednosti korisničkih jedinica. Interno, ovo je prosti broj predstavljen varijablom. Ali da bi korisnik vidio ovaj broj, mora se pretvoriti u tekst, koji će biti prikazan na ekranu. Stoga je pri izradi igrice nužno napisati kod koji brojeve pretvara u tekst.

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

Prvo, korisnik treba ispisati znak 0. To će zahtijevati korištenje kodirane vrijednosti ovog znaka - 48. Zatim korisnik treba ispisati znak 5, čiji je kod 53. Ovdje možete vidjeti zanimljiva značajka: šifra znaka znamenke razlikuje se od stvarne vrijednosti za 48. Stoga, za jednoznamenkaste (i samo jednoznamenkaste) brojeve možemo koristiti ovaj kod:

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

char izlaz = var+48;

Sada možemo prikazati izlaznu varijablu na ekranu. Samo jedan problem ostaje za riješiti: u stvarnim situacijama, jednoznamenkasti brojevi se vrlo rijetko koriste. Na primjer, u Company of heroes, igrač u prosjeku ima više od 15 ekipa, u Age of Empires - više od 50. U drugim igrama, situacija je slična. U pucačinama može biti potrebno prikazati broj streljiva i zdravlje (koji su gotovo uvijek veći od 9). Naravno, prilikom izrade naše igrice morat ćemo prikazati višeznamenkaste brojeve. Ispis višeznamenkastih brojeva razmotrit ćemo u sljedećoj lekciji, a sada ćemo se vratiti na razmatranje kodiranja.

Kodiranje (kodiranje) Unicode - Unicode

Jedan bajt može imati samo 256 vrijednosti. To znači da se 256 znakova može kodirati u ASCII kodiranju: brojevi, slova, piktogrami, interpunkcijski znakovi i razni drugi znakovi. U isto vrijeme, postoje pisma koja imaju puno više znakova, poput kineskih ili japanskih znakova.

Kako bi se riješio ovaj (i neki drugi) problem, ranih devedesetih je stvoren Unicode kodiranje. Izvorno su svi Unicode znakovi zauzimali dva bajta. Prema tome, 216 = 65536 vrijednosti moglo bi se kodirati u unicode. Prostor koda je tada proširen na više od milijun znakova. To je rezultiralo s nekoliko prikaza Unicodea.

Dva su najpopularnija Unicode prikaza: UTF-8 - koristi se na webu i UTF-16 - koristi se u sustavu Windows (Windows XP, Windows Vista, Windows 7).

U kontekstu razvoja igre, nije važno kako su svi znakovi kodirani u različitim prikazima Unicodea. Ali važno je da su u svim prikazima arapski brojevi kodirani na isti način kao u ASCII.

Postoje dvije verzije UTF-16: UTF-16LE (little-endian) - kodiranje s obrnuti redoslijed bajtova i UTF-16BE (big-endian) - little endian kodiranje. Na Windowsima se, naravno, koristi UTF16-LE.

Šifra znaka u Unicodeu označena je na sljedeći način: U + hhhh (četiri heksadecimalne znamenke, h - od heksadecimalne - heksadecimalne). Na primjer, U+221A je simbol korijen - √.

Dio znakova u UTF-16 kodiran je u dva bajta (prve 63 tisuće). Preostali znakovi su kodirani kao surogat parovi. Budući da to nije jako važno za kreiranje igara, neću se detaljnije zadržavati na surogat parovima.

U UTF-8, prvih 128 znakova kodirano je kao jedan bajt. Preostali znakovi mogu se kodirati u nekoliko bajtova (od dva do četiri).

I još nešto (najvažnije): svi znakovi svih modernih i mnogih mrtvih pisama su kodirani u Unicodeu, plus znakovi iz razna područja znanosti i kulture (matematički i ekonomski simboli, notni zapis i još mnogo toga). To je razlog zašto treba koristiti Unicode.

Još jednom, poznavanje Unicode standarda i značajki njegovih različitih prikaza ne pomaže mnogo u takvoj temi kao što je stvaranje igara, tako da ćete morati sami nastaviti dalje upoznavanje s Unicodeom. Standard će, kao i obično, 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 8-bitno kodiranje). Glavni način je Unicode. Kodne stranice su potrebne za kompatibilnost sa starijim aplikacijama (u Windows 95, Windows 98 - uglavnom se koristio ASCII). Osim toga, Unicode nitko ne razumije važan program- konzola.

Neka vam ne smeta novi termin- kodna stranica. U Windowsima se sva kodiranja tako nazivaju (skupovi znakova ili kodiranja). Oni. Koncept kodiranja je ekvivalentan kodnoj stranici.

Odmah ću staviti primjedbu, što je bolje zapamtiti. Windows ima jasno odvajanje: ovdje je unicode (UTF-16LE), a ovdje su sva ostala kodiranja. I Unicode i druga kodiranja u sustavu Windows nazivaju se kodnim stranicama, ali ja ću ovaj izraz (kodne stranice) primijeniti na sva kodiranja osim Unicodea.

Kad smo pisali konzolni programi, izlaz teksta je izvršen korištenjem windows-1252 kodne stranice. Zbog toga smo morali pozvati setlocale (on mijenja kodnu stranicu u windows-1251):

Ova funkcija mijenja lokalitet.

Lokal (lokalne specifičnosti) – lokalitet

Windows ima takvu stvar kao što je Locale. Ovdje nisam sasvim u pravu kad koristim paus papir ove riječi - lokalitet, ali, po mom mišljenju, prilično je prostran da sadrži cijelo značenje pojma lokaliteta. Locale se prevodi kao lokalne značajke. Oni. ovo su neki parametri koji se koriste na ovom mjestu (regiji, državi). setlocale samo mijenja ove značajke:

setlocale(LC_CTYPE,"ruski");

U ovom pozivu, lokalitet se mijenja u ruski. Stoga Windows može koristiti naše lokalne značajke: prikaz datuma i vremena, sustav mjerenja, valutu i, naravno, kodnu stranicu.

Prvi parametar ove funkcije govori koje kategorije lokalne značajke 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, sve).

Povratak na kodiranja.

Istovremeno se može koristiti samo jedna kodna stranica, dok se Unicode također može koristiti sa znakovima kodne stranice u programu, budući da se Unicode razlikuje od svih ostalih kodnih stranica. Pokušajte uvijek koristiti Unicode u svojim programima. Ima smisla koristiti kodne stranice samo u konzoli.

Najpopularniji povezani članci