Standart C Programlama Dili


EK A: KARAKTER KODLARI ÇİZELGESİ

Bizim kullandığımız sistemde olduğu gibi, birçok sistemde karakterleri göstermek için ASCII (American Standard Code for Information Interchange—Bilgi Değişimi için Standart Amerikan Kodu) karakter kodları kullanılır. ASCII karakter kümesi 128 tane (7 bitlik) koddan oluşur ve 33 kontrol karakteri, bir boşluk ve 94 görüntülenebilen (grafik) karakteri tanımlar. Bir kontrol karakteri çıktı aygıtında değişik etkilere neden olabildiği gibi, bazen grafik bir şekil de oluşturabilir.

Bir karakterlik bilginin saklanması için 8 bitlik baytların kullanıldığı makineler genelde 128 tane daha karakter içeren genişletilmiş bir karakter kümesi sağlarlar. Bu karakterlerin kodları 128’den 255’e kadardır ve aygıttan aygıta veya sistemden sisteme değişebilir.

Aşağıdaki ilk iki tablo, standart ASCII karakter kümesinin bir listesini vermektedir. Bu listede kontrol karakterleri ^tuş şeklinde gösterilirler; bu da Ctrl tuşu basılı iken tuşa basarak bu karakterin elde edilebileceği anlamına gelmektedir. Ayrıca:

  • Windows bilgisayarlarda, Alt tuşu basılı iken, klavyenin sağındaki sayısal tuşlar kullanılarak girilecek olan ASCII ondalık kod aracılığıyla ilgili karakter oluşturulabilir. Örneğin, A harfini elde etmek için Alt tuşu basılı iken, sırayla önce 6’ya sonra da 5’e basın.
  • Linux (GNOME) bilgisayarda ise, Ctrl ve Shift tuşları basılı iken, önce U, sonra da ilgili onaltılı kod girilerek ilgili karakter oluşturulabilir. Örneğin, A harfini elde etmek için Ctrl ve Shift tuşları basılı iken, sırayla U, 4 ve 1’e basın.

Daha sonraki iki tabloda ise 128’den 255’e kadar kodlara sahip olan karakterler için PC’lerde kullanılan iki ayrı karakter standardı gösterilmiştir:

  • ASCII (genişletilmiş): Bu, daha çok MS-DOS ortamında kullanılmaktadır. Burada verilen liste Kod Sayfası 437ye dayanmaktadır. MS-DOS ortamında, bu karakterlerin klavyeden girilmesi için Alt tuşu basılı iken klavyenin sağındaki sayısal tuşlar kullanılarak, ilgili karakterin ondalık kodu girilmelidir. Örneğin, Ç için Alt+128. Windows ortamında da kullanılan yöntem aynıdır, ancak bu işlemi yaparken Num Lock ışığının yakılı olması gerekmektedir.
  • ANSI: Windows ortamında kullanılmaktadır. Burada verilen liste Windows-1252 Kod Sayfasına dayanmaktadır. Bu karakterlerin klavyeden girilmesi için yukarıdaki yöntem kullanılır; sadece girilen kodun ANSI olduğunu belirtmek için kodun önüne 0 eklenir. Örneğin, Ç için Alt+0199.

Türkçe karakterler için en az üç ayrı (eski) standart bulunmaktadır. Her birinde, belirli karakter kodları için, uluslararası tanımlanmış karakterin yerini Türkçe karakter almaktadır. Bunlar, listede, yerini aldıkları karakterlerin yanında, parantez içinde verilmiştir.

  • 7 bitlik ASCII standardı: Bu sadece 128 değişik karakter kodunu destekleyen aygıtlarda kullanılmaktadır. Günümüzde 256 değişik karakter kullanan PC’lerin yaygınlaşmasıyla, bu standart kullanımdan kalkmıştır. Daha fazla bilgi için TR7DEC konusunu inceleyebilirsiniz.
  • 8 bitlik genişletilmiş ASCII standardı: Eskiden MS-DOS ortamında kullanılmaktaydı. Daha fazla bilgi için Kod Sayfası 857 konusunu inceleyebilirsiniz.
  • 8 bitlik ANSI standardı: Windows gibi grafik ortamlarda kullanılmaktadır. Daha fazla bilgi için Code Page Windows-1254 konusunu inceleyebilirsiniz.

UTF-8 Karakterler

Günümüzde, standart ASCII karakterleri dışındaki bir milyondan fazla karakteri veya daha doğru bir deyişle kod noktasını ifade edebilmek için UTF-8 (Unicode çokbaytlı karakter) standardı yaygınlaşmıştır.

  • Linux (GNOME) ortamlarında, yukarıda da anlatıldığı gibi, Ctrl+Shift+U+onaltılı kod yöntemi ile bu kod noktalarından herhangi birini klavyeden girme olanağı bulunmaktadır. Örneğin, 🚻 işaretini girmek için Ctrl+Shift+U+1F6BB tuşlarını kullanabilirsiniz.
  • Windows ortamlarında ise, bazı uygulamalar tarafından desteklenen giriş yöntemi şöyledir: Kod noktasının onaltılı kodunu dokümana yazdıktan sonra, kod seçilip Alt+X tuşlarına basılır. Bu yöntem, ek olarak bazı Linux uygulamalarında da (örneğin, LibreOffice) kullanılabilmektedir.

UTF-8 metin biçiminde saklanan bir C kaynak kod dosyasında, yukarıda bahsedilen yöntemlerle girilmiş karakterleri program içinde kullanabilirsiniz. Ancak, kodu 127’den büyük olan herhangi bir karakter UTF-8 standardında birden fazla (2 ile 4 arasında) bayt ile gösterildiği için, bu tip karakterleri char tipinde saklayamaz ve kullanamazsınız. Bunun yerine, char * tipinde bir karakter dizisi değişkeninde saklamanız gerekir.

Aşağıdaki program UTF-8 biçiminde bir metin dosyasında saklanıp derlendiğinde ve UTF-8’in desteklendiği ortamlarda (örneğin, Linux veya Cygwin) çalıştırıldığında, üç farklı karakteri görüntüleyecek ve bunların bellekte tuttuğu bayt sayısını verecektir.

#include <stdio.h>
#include <string.h>

#define SEMBOL1 "a"
#define SEMBOL2 "ö"
#define SEMBOL3 "🚻"
#define BAS(x)  printf(SEMBOL##x " veya %s - Uzunluk: %zu\n", \
  SEMBOL##x, strlen(SEMBOL##x));

int main(void)
{
  BAS(1);
  BAS(2);
  BAS(3);
}

Bir C programında standart ASCII dışındaki karakterleri daha detaylı ve doğru bir şekilde kullanmak isterseniz, Kısım 8.2’de anlatılan yöntemleri kullanmanız önerilir.

Tüm Unicode kod noktalarının listelendiği tablolara ulaşmak için https://www.unicode.org/charts/PDF/ adresine bakabilirsiniz. Ayrıca, Unicode Karakterleri Tabloları sayfasında istediğiniz Unicode tablosunu (bir tabloda 256 adet karakter görüntülenmektedir) devingen olarak tarayıcı penceresinde oluşturabilirsiniz.

Ond. Sekizli Onaltılı Karakter Anlamı

0 0000 0x00 ^@ NUL Boş—zaman doldurmak için kull. tamamı sıfır karakter

1 0001 0x01 ^A SOH Başlık başı

2 0002 0x02 ^B STX Metin başı

3 0003 0x03 ^C ETX Metin sonu

4 0004 0x04 ^D EOT İletim sonu

5 0005 0x05 ^E ENQ Sorgu—Kimsiniz?

6 0006 0x06 ^F ACK Olumlu yanıt—Evet

7 0007 0x07 ^G BEL Zil—İnsan dikkati gerekiyor

8 0010 0x08 ^H BS Geriye alma (biçim etkileyicisi)

9 0011 0x09 ^I HT Yatay durak (biçim etkileyicisi)

10 0012 0x0A ^J LF Satır ilerletme (biçim etkileyicisi)

11 0013 0x0B ^K VT Dikey durak (biçim etkileyicisi)

12 0014 0x0C ^L FF Sayfa ilerletme (biçim etkileyicisi)

13 0015 0x0D ^M CR Satırbaşı (biçim etkileyicisi)

14 0016 0x0E ^N SO Dışarı kayma—standart olmayan kod geliyor

15 0017 0x0F ^O SI İçeri kayma—standart koda geri dönüş

16 0020 0x10 ^P DLE Veri bağl. kaçışı—sınırlı veri iletişimi kontr. değişikliği

17 0021 0x11 ^Q DC1 Yardımcı aygıtları açıp kapamak için aygıt kontrolü

18 0022 0x12 ^R DC2 Yardımcı aygıtları açıp kapamak için aygıt kontrolü

19 0023 0x13 ^S DC3 Yardımcı aygıtları açıp kapamak için aygıt kontrolü

20 0024 0x14 ^T DC4 Yardımcı aygıtları açıp kapamak için aygıt kontrolü

21 0025 0x15 ^U NAK Olumsuz yanıt—Hayır

22 0026 0x16 ^V SYN Eşzamanlı boşa işleme—eşzamanlama sağlamak için

23 0027 0x17 ^W ETB İletim öbeği sonu—fiziksel iletişim öbekleri ile ilintili

24 0030 0x18 ^X CAN Önceki bilginin iptali

25 0031 0x19 ^Y EM Ortam sonu—kullanılan/istenen bilgi bölümünün sonu

26 0032 0x1A ^Z SUB Hatalı karakterin yerine gelen karakter

27 0033 0x1B ^[ ESC Kaçış—kod genişlemesi için

28 0034 0x1C ^\ FS Dosya ayırıcısı

29 0035 0x1D ^] GS Grup ayırıcısı

30 0036 0x1E ^^ RS Kayıt ayırıcısı

31 0037 0x1F ^_ US Birim ayırıcısı

32 0040 0x20 BOŞLUK Basılmayan karakter—sözcük ayırıcısı

33 0041 0x21 ! Ünlem işareti

34 0042 0x22 " (Çift) tırnak işareti

35 0043 0x23 # (Ğ) Sayı işareti

36 0044 0x24 $ Dolar

37 0045 0x25 % Yüzde

38 0046 0x26 & Ve işareti

39 0047 0x27 ' Kesme işareti (tek tırnak)

40 0050 0x28 ( Sol parantez

41 0051 0x29 ) Sağ parantez

42 0052 0x2A * Yıldız

43 0053 0x2B + Artı

44 0054 0x2C , Virgül

45 0055 0x2D - Çizgi işareti

46 0056 0x2E . Nokta

47 0057 0x2F / Bölü

48 0060 0x30 0

49 0061 0x31 1

50 0062 0x32 2

51 0063 0x33 3

52 0064 0x34 4

53 0065 0x35 5

54 0066 0x36 6

55 0067 0x37 7

56 0070 0x38 8

57 0071 0x39 9

58 0072 0x3A : İki nokta

59 0073 0x3B ; Noktalı virgül

60 0074 0x3C < Küçüktür

61 0075 0x3D = Eşittir

62 0076 0x3E > Büyüktür

63 0077 0x3F ? Soru işareti

Ond. Sekizli Onaltılı Karakter Anlamı

64 0100 0x40 @ (Ç) -de işareti

65 0101 0x41 A

66 0102 0x42 B

67 0103 0x43 C

68 0104 0x44 D

69 0105 0x45 E

70 0106 0x46 F

71 0107 0x47 G

72 0110 0x48 H

73 0111 0x49 I

74 0112 0x4A J

75 0113 0x4B K

76 0114 0x4C L

77 0115 0x4D M

78 0116 0x4E N

79 0117 0x4F O

80 0120 0x50 P

81 0121 0x51 Q

82 0122 0x52 R

83 0123 0x53 S

84 0124 0x54 T

85 0125 0x55 U

86 0126 0x56 V

87 0127 0x57 W

88 0130 0x58 X

89 0131 0x59 Y

90 0132 0x5A Z

91 0133 0x5B [ (Ş) Sol köşeli parantez

92 0134 0x5C \ (İ) Ters bölü

93 0135 0x5D ] (Ö) Sağ köşeli parantez

94 0136 0x5E ^ (Ü) Uzatma işareti

95 0137 0x5F _ Alt çizgi

96 0140 0x60 ` (ç) Ağır vurgu

97 0141 0x61 a

98 0142 0x62 b

99 0143 0x63 c

100 0144 0x64 d

101 0145 0x65 e

102 0146 0x66 f

103 0147 0x67 g

104 0150 0x68 h

105 0151 0x69 i

106 0152 0x6A j

107 0153 0x6B k

108 0154 0x6C l

109 0155 0x6D m

110 0156 0x6E n

111 0157 0x6F o

112 0160 0x70 p

113 0161 0x71 q (ğ)

114 0162 0x72 r

115 0163 0x73 s

116 0164 0x74 t

117 0165 0x75 u

118 0166 0x76 v

119 0167 0x77 w

120 0170 0x78 x

121 0171 0x79 y

122 0172 0x7A z

123 0173 0x7B { (ş) Sol çengelli parantez

124 0174 0x7C | (ı) Dikey çizgi

125 0175 0x7D } (ö) Sağ çengelli parantez

126 0176 0x7E ~ (ü) İnceltme işareti

127 0177 0x7F DEL Ortam doldurma

Ond. Sekizli Onaltılı ASCII Kar. ANSI Kar.

128 0200 0x80 Ç €

129 0201 0x81 ü 

130 0202 0x82 é ‚

131 0203 0x83 â ƒ

132 0204 0x84 ä „

133 0205 0x85 à …

134 0206 0x86 å †

135 0207 0x87 ç ‡

136 0210 0x88 ê ˆ

137 0211 0x89 ë ‰

138 0212 0x8A è Š

139 0213 0x8B ï ‹

140 0214 0x8C î Œ

141 0215 0x8D ì (ı) 

142 0216 0x8E Ä Ž

143 0217 0x8F Å 

144 0220 0x90 É 

145 0221 0x91 æ ‘

146 0222 0x92 Æ ’

147 0223 0x93 ô “

148 0224 0x94 ö ”

149 0225 0x95 ò •

150 0226 0x96 û –

151 0227 0x97 ù —

152 0230 0x98 ÿ (İ) ˜

153 0231 0x99 Ö ™

154 0232 0x9A Ü š

155 0233 0x9B ¢ ›

156 0234 0x9C £ œ

157 0235 0x9D ¥ 

158 0236 0x9E ₧ (Ş) ž

159 0237 0x9F ƒ (ş) Ÿ

160 0240 0xA0 á  

161 0241 0xA1 í ¡

162 0242 0xA2 ó ¢

163 0243 0xA3 ú £

164 0244 0xA4 ñ ¤

165 0245 0xA5 Ñ ¥

166 0246 0xA6 ª (Ğ) ¦

167 0247 0xA7 º (ğ) §

168 0250 0xA8 ¿ ¨

169 0251 0xA9 ⌐ ©

170 0252 0xAA ¬ ª

171 0253 0xAB ½ «

172 0254 0xAC ¼ ¬

173 0255 0xAD ¡ ­

174 0256 0xAE « ®

175 0257 0xAF » ¯

176 0260 0xB0 ░ °

177 0261 0xB1 ▒ ±

178 0262 0xB2 ▓ ²

179 0263 0xB3 │ ³

180 0264 0xB4 ┤ ´

181 0265 0xB5 ╡ µ

182 0266 0xB6 ╢ ¶

183 0267 0xB7 ╖ ·

184 0270 0xB8 ╕ ¸

185 0271 0xB9 ╣ ¹

186 0272 0xBA ║ º

187 0273 0xBB ╗ »

188 0274 0xBC ╝ ¼

189 0275 0xBD ╜ ½

190 0276 0xBE ╛ ¾

191 0277 0xBF ┐ ¿

Ond. Sekizli Onaltılı ASCII Kar. ANSI Kar.

192 0300 0xC0 └ À

193 0301 0xC1 ┴ Á

194 0302 0xC2 ┬ Â

195 0303 0xC3 ├ Ã

196 0304 0xC4 ─ Ä

197 0305 0xC5 ┼ Å

198 0306 0xC6 ╞ Æ

199 0307 0xC7 ╟ Ç

200 0310 0xC8 ╚ È

201 0311 0xC9 ╔ É

202 0312 0xCA ╩ Ê

203 0313 0xCB ╦ Ë

204 0314 0xCC ╠ Ì

205 0315 0xCD ═ Í

206 0316 0xCE ╬ Î

207 0317 0xCF ╧ Ï

208 0320 0xD0 ╨ Ð (Ğ)

209 0321 0xD1 ╤ Ñ

210 0322 0xD2 ╥ Ò

211 0323 0xD3 ╙ Ó

212 0324 0xD4 ╘ Ô

213 0325 0xD5 ╒ Õ

214 0326 0xD6 ╓ Ö

215 0327 0xD7 ╫ ×

216 0330 0xD8 ╪ Ø

217 0331 0xD9 ┘ Ù

218 0332 0xDA ┌ Ú

219 0333 0xDB █ Û

220 0334 0xDC ▄ Ü

221 0335 0xDD ▌ Ý (İ)

222 0336 0xDE ▐ Þ (Ş)

223 0337 0xDF ▀ ß

224 0340 0xE0 α à

225 0341 0xE1 β á

226 0342 0xE2 Γ â

227 0343 0xE3 π ã

228 0344 0xE4 Σ ä

229 0345 0xE5 σ å

230 0346 0xE6 μ æ

231 0347 0xE7 τ ç

232 0350 0xE8 Φ è

233 0351 0xE9 θ é

234 0352 0xEA Ω ê

235 0353 0xEB δ ë

236 0354 0xEC ∞ ì

237 0355 0xED ∅ í

238 0356 0xEE ∈ î

239 0357 0xEF ∩ ï

240 0360 0xF0 ≡ ð (ğ)

241 0361 0xF1 ± ñ

242 0362 0xF2 ≥ ò

243 0363 0xF3 ≤ ó

244 0364 0xF4 ⌠ ô

245 0365 0xF5 ⌡ õ

246 0366 0xF6 ÷ ö

247 0367 0xF7 ≈ ÷

248 0370 0xF8 ∘ ø

249 0371 0xF9 • ù

250 0372 0xFA · ú

251 0373 0xFB √ û

252 0374 0xFC ⁿ ü

253 0375 0xFD ² ý (ı)

254 0376 0xFE ∎ þ (ş)

255 0377 0xFF ÿ