Il KOI8-RU è un sistema di codifica di caratteri a 8-bit progettato per essere adoperato con il russo, l'ucraino e il bielorusso, nonché con tutte quelle lingue che utilizzano l'alfabeto cirillico. Il sistema originale, il KOI8, il cui nome sta per Kod Obmena Informaciej, 8 bit (in russo Код Обмена Информацией, 8 бит, Codice per lo scambio di informazioni, 8 bit), fu progettato dalle autorità sovietiche nel 1974 e da allora ne sono stati creati vari derivati, tra cui il KOI8-U, che aggiunge al KOI8 i caratteri dell'ucraino, e il KOI8-R, utilizzato per il russo e per il bulgaro. Proprio su quest'ultimo è basato il KOI8-RU, nel quale dieci caratteri grafici del KOI8-R sono sostituiti da quattro lettere ucraine e una bielorussa, in minuscolo e in maiuscolo: Ґ, Є, І, Ї e Ў (l'unica lettera cirillica caratteristica del bielorusso).[1][2]
Il KOI8 ed i sistemi da lui derivati hanno la particolarità di avere le lettere cirilliche disposte in ordine pseudo-latino piuttosto che nel comune ordine dell'alfabeto cirillico come hanno per esempio l'ISO 8859-5 e l'Unicode. Sebbene questo possa sembrare anti intuitivo, questa caratteristica risulta utile per il fatto che se l'ottavo bit viene eliminato, il testo è parzialmente leggibile utilizzando il sistema ASCII e può essere convertito in un testo in KOI7 sintatticamente corretto. Per esempio se dalla scritta in KOI8-RU "Русский Текст" viene eliminato l'ottavo bit, essa diventa rUSSKIJ tEKST ("Testo russo") ed un tentativo di interpretare tale stringa con il KOI7 porta a "РУССКИЙ ТЕКСТ". Il KOI8 fu creato basandosi sul codice Morse russo (che a sua volta fu creato dal codice Morse internazionale basandosi sulle assonanze) e la connessione riguardante l'ordine delle lettere tra il codice Morse russo e quello internazionale è la stessa che esiste tra il KOI8 e l'ASCII.
Nei sistemi di IBM il numero di code page assegnato al sistema KOI8-RU è 1167.[3]
La seguente tabella mostra il sistema di codifica KOI8-RU.[3] Ogni carattere è rappresentato al centro della cella con il suo equivalente Unicode in alto e il suo codice decimale in basso.
Caratteri di controllo | Punteggiatura | ||
Cifre numeriche | Caratteri alfabetici | ||
Caratteri internazionali | Caratteri non definiti | ||
Caratteri grafici | Punteggiatura estesa |
-0 | -1 | -2 | -3 | -4 | -5 | -6 | -7 | -8 | -9 | -A | -B | -C | -D | -E | -F | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0- | 0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
1- | 16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
2- | 0020 SP 32 |
0021 ! 33 |
0022 " 34 |
0023 # 35 |
0024 $ 36 |
0025 % 37 |
0026 & 38 |
0027 ' 39 |
0028 ( 40 |
0029 ) 41 |
002A * 42 |
002B + 43 |
002C , 44 |
002D - 45 |
002E . 46 |
002F / 47 |
3- | 0030 0 48 |
0031 1 49 |
0032 2 50 |
0033 3 51 |
0034 4 52 |
0035 5 53 |
0036 6 54 |
0037 7 55 |
0038 8 56 |
0039 9 57 |
003A : 58 |
003B ; 59 |
003C < 60 |
003D = 61 |
003E > 62 |
003F ? 63 |
4- | 0040 @ 64 |
0041 A 65 |
0042 B 66 |
0043 C 67 |
0044 D 68 |
0045 E 69 |
0046 F 70 |
0047 G 71 |
0048 H 72 |
0049 I 73 |
004A J 74 |
004B K 75 |
004C L 76 |
004D M 77 |
004E N 78 |
004F O 79 |
5- | 0050 P 80 |
0051 Q 81 |
0052 R 82 |
0053 S 83 |
0054 T 84 |
0055 U 85 |
0056 V 86 |
0057 W 87 |
0058 X 88 |
0059 Y 89 |
005A Z 90 |
005B [ 91 |
005C \ 92 |
005D ] 93 |
005E ^ 94 |
005F _ 95 |
6- | 0060 ` 96 |
0061 a 97 |
0062 b 98 |
0063 c 99 |
0064 d 100 |
0065 e 101 |
0066 f 102 |
0067 g 103 |
0068 h 104 |
0069 i 105 |
006A j 106 |
006B k 107 |
006C l 108 |
006D m 109 |
006E n 110 |
006F o 111 |
7- | 0070 p 112 |
0071 q 113 |
0072 r 114 |
0073 s 115 |
0074 t 116 |
0075 u 117 |
0076 v 118 |
0077 w 119 |
0078 x 120 |
0079 y 121 |
007A z 122 |
007B { 123 |
007C | 124 |
007D } 125 |
007E ~ 126 |
127 |
8- | 2500 ─ 128 |
2502 │ 129 |
250C ┌ 130 |
2510 ┐ 131 |
2514 └ 132 |
2518 ┘ 133 |
251C ├ 134 |
2524 ┤ 135 |
252C ┬ 136 |
2534 ┴ 137 |
253C ┼ 138 |
2580 ▀ 139 |
2584 ▄ 140 |
2588 █ 141 |
258C ▌ 142 |
2590 ▐ 143 |
9- | 2591 ░ 144 |
2592 ▒ 145 |
2593 ▓ 146 |
2320 ⌠ 147 |
25A0 ■ 148 |
2219 ∙ 149 |
221A √ 150 |
2248 ≈ 151 |
2264 ≤ 152 |
2265 ≥ 153 |
00A0 NBSP 154 |
2321 ⌡ 155 |
00B0 ° 156 |
00B2 ² 157 |
00B7 · 158 |
00F7 ÷ 159 |
A- | 2550 ═ 160 |
2551 ║ 161 |
2552 ╒ 162 |
0451 ё 163 |
0454 є 164 |
2554 ╔ 165 |
0456 i 166 |
0457 ї 167 |
2557 ╗ 168 |
2558 ╘ 169 |
2559 ╙ 170 |
255A ╚ 171 |
255B ╛ 172 |
0491 ґ 173 |
045D ў 174 |
255E ╞ 175 |
B- | 255F ╟ 176 |
2560 ╠ 177 |
2561 ╡ 178 |
0401 Ё 179 |
0404 Є 180 |
2563 ╣ 181 |
0406 I 182 |
0407 Ї 183 |
2566 ╦ 184 |
2567 ╧ 185 |
2568 ╨ 186 |
2569 ╩ 187 |
256A ╪ 188 |
0490 Ґ 189 |
040D Ў 190 |
00A9 © 191 |
C- | 044E ю 192 |
0430 а 193 |
0431 б 194 |
0446 ц 195 |
0434 д 196 |
0435 е 197 |
0444 ф 198 |
0433 г 199 |
0445 х 200 |
0438 и 201 |
0439 й 202 |
043A к 203 |
043B л 204 |
043C м 205 |
043D н 206 |
043E о 207 |
D- | 043F п 208 |
044F я 209 |
0440 р 210 |
0441 с 211 |
0442 т 212 |
0443 у 213 |
0436 ж 214 |
0432 в 215 |
044C ь 216 |
044B ы 217 |
0437 з 218 |
0448 ш 219 |
044D э 220 |
0449 щ 221 |
0447 ч 222 |
044A ъ 223 |
E- | 042E Ю 224 |
0410 А 225 |
0411 Б 226 |
0426 Ц 227 |
0414 Д 228 |
0415 Е 229 |
0424 Ф 230 |
0413 Г 231 |
0425 Х 232 |
0418 И 233 |
0419 Й 234 |
041A К 235 |
041B Л 236 |
041C М 237 |
041D Н 238 |
041E О 239 |
F- | 041F П 240 |
042F Я 241 |
0420 Р 242 |
0421 С 243 |
0422 Т 244 |
0423 У 245 |
0416 Ж 246 |
0412 В 247 |
042C Ь 248 |
042B Ы 249 |
0417 З 250 |
0428 Ш 251 |
042D Э 252 |
0429 Щ 253 |
0427 Ч 254 |
042A Ъ 255 |
-0 | -1 | -2 | -3 | -4 | -5 | -6 | -7 | -8 | -9 | -A | -B | -C | -D | -E | -F |
Come si vede dalla tabella, la differenza tra il KOI8-RU ed il KOI8-R sta nelle posizioni 0xA4, 0xA6, 0xA7, 0xAD, 0xAE, 0xB4, 0xB6, 0xB7, 0xBD e 0xBE, dove sono presenti lettere non esistenti nella lingua russa.
Nella tabella soprastante, il corrispettivo del codice Unicode 20 è il carattere spazio mentre del codice Unicode A0 è lo spazio unificatore.
Anche se l'RFC 2319[4] dice che il carattere in posizione 0x95 ha corrispettivo Unicode U+2219 (∙), esso può anche avere U+2022 (•) in modo da farlo coincidere con il carattere punto elenco del Windows-1251.