- 1 1. Sissejuhatus
- 2 2. Mis on C-keeles märgikood? Põhitõed ja tüübid
- 3 3. Tähemärkide ja märgikoodide põhikäsitlus C-keeles
- 4 4. Märgikoodide hankimine ja kuvamine C-keeles
- 5 5. Märgikoodid ja stringide töötlemine C-keeles
- 6 6. Jaapani tähemärkide käsitlemine ja ettevaatusabinõud
- 7 7. Märgikoodide teisendamine ja ühilduvus C-keeles
- 8 8. Kokkuvõte
1. Sissejuhatus
C-keeles on “märgikood” alusmehhanism, mis esitab tähemärgid numbritena ja võimaldab neid programmis töödelda. Märgikoodide õige mõistmine on hädavajalik, eriti juhul, kui on vaja toetada mitut keelt, näiteks jaapani keelt, et vältida tähemärkide moonutamist või andmetöötlusvigu. Käesolevas artiklis selgitame üksikasjalikult C-keele märgikoodide põhitõdesid, erinevate märgikoodide käsitlemist ja tähelepanupunkte stringide töötlemisel. Selle artikli kaudu omandad tugeva aluse C-keele tähemärkide töötlemisel ja praktilised oskused.
2. Mis on C-keeles märgikood? Põhitõed ja tüübid
Märgikoodi põhitõed
Märgikood on standard, mis esitab tähemärgid numbritena, et arvuti saaks neid tõlgendada. Näiteks ASCII-koodis vastab täht “A” numbrile 65. Paljud programmeerimiskeeled, sealhulgas C, kasutavad tähemärkide kuvamiseks ja töötlemiseks märgikoode.
Levinumad märgikoodide tüübid
ASCII
ASCII (American Standard Code for Information Interchange) on 7-bitine tähemärgikogum, mis sisaldab ladina tähti, numbreid ja sümboleid ning on C-keele põhiline märgikood. ASCII-kood katab väärtused 0 kuni 127 ja on mõeldud ingliskeelseks tekstiks.
Unicode ja UTF-8
Unicode on loodud mitmekeelse toe jaoks. UTF-8 on üks Unicode’i kodeerimisviise, mis kasutab muutuva pikkusega kodeeringut ja ühildub ASCII-ga. UTF-8 on laialt kasutusel süsteemides ja veebikeskkondades, kus on vaja mitmekeelset tuge.
Shift_JIS ja EUC-JP
Jaapani keeles kasutatavad märgikoodid hõlmavad Shift_JIS ja EUC-JP. Shift_JIS on eriti levinud Windowsi keskkonnas ja esitab jaapani kanji- ja katakana-märgid kahe baidiga. EUC-JP on levinud UNIX-põhistes süsteemides ja kasutab erinevat struktuuri jaapani keele toetamiseks.
3. Tähemärkide ja märgikoodide põhikäsitlus C-keeles
char
-tüübi põhitõed
C-keeles esitatakse tähemärgid char
-tüübina. char
kasutab 1 baiti mälust ja salvestab sinna vastava märgikoodi numbrilise väärtuse. Näiteks:
char letter = 'A'; // Tähemärgi otsene määramine
char code = 65; // ASCII koodi määramine numbrina
Põgenemissekventside kasutamine
Erimärkide esitamiseks kasutatakse põgenemissekventse. Näiteks uus rida või tabeldus:
char newline = '\n'; // Reavahetus
char tab = '\t'; // Tabeldus
Põgenemissekventside abil saab programmis juhtmärke tõhusalt hallata.
4. Märgikoodide hankimine ja kuvamine C-keeles
Märgikoodi kuvamine printf
-funktsiooniga
C-keeles saab printf
-funktsiooni abil hõlpsalt kuvada tähemärki ja selle koodi:
#include <stdio.h>
int main() {
char ch = 'A';
printf("Character: %c, ASCII Code: %d\n", ch, ch);
return 0;
}
Ülaltoodud kood kuvab tähe 'A'
ja selle ASCII-koodi 65.
Märgikoodide vahemiku kuvamine
Võimalik on kuvada kõik tähemärgid ja nende koodid kindlas vahemikus, näiteks ASCII-koodid vahemikus 32–126:
#include <stdio.h>
int main() {
for (int code = 32; code <= 126; code++) {
printf("ASCII code %d: %c\n", code, (char)code);
}
return 0;
}
5. Märgikoodid ja stringide töötlemine C-keeles
Turvaline stringi kopeerimine strncpy
-ga
strncpy
-funktsioon võimaldab turvaliselt kopeerida stringe, määrates sihtmassiivi suuruse ja vältides puhvri ületäitmist. strcpy
võib väikse puhvri korral põhjustada mälutõrkeid, mistõttu on strncpy
eelistatud.
Stringide võrdlemine strcmp
-ga
Stringide võrdlemiseks kasutatakse strcmp
-funktsiooni, mis tagastab 0, kui stringid on identsed.
6. Jaapani tähemärkide käsitlemine ja ettevaatusabinõud
Mitmebaidiste märkide (nt jaapani keel) korrektseks käsitlemiseks C-keeles tuleb määrata õige märgikood. Kui tekst moonutatakse, võib põhjus olla vale kodeering.
Näide: Jaapani keele kuvamine setlocale
-ga
Alltoodud kood näitab, kuidas kuvada jaapani keelt UTF-8-s:
#include <stdio.h>
#include <locale.h>
int main() {
setlocale(LC_ALL, "ja_JP.UTF-8");
printf("こんにちは\n");
return 0;
}
7. Märgikoodide teisendamine ja ühilduvus C-keeles
Erinevate kodeeringute vaheliseks teisendamiseks kasutatakse tavaliselt iconv
-teeki. Näiteks Shift_JIS → UTF-8 teisendus:
8. Kokkuvõte
Märgikoodide mõistmine C-keeles on oluline mitmekeelsete rakenduste loomisel. Turvaliste funktsioonide (nt strncpy
) ja teisendustööriistade (nt iconv
) kasutamine aitab vältida tähemärkide moonutamist ja andmetöötlusvigu.