Кодировки UTF-8, Windows-1251, CP-866.... или русский язык в Arduino IDE

Что такое кодировка:

Кодировка это процесс преобразования данных или сигналов из формы, удобной для восприятия, в форму, удобную для хранения, обработки и передачи.

Данные в микроконтроллере хранятся, обрабатываются и передаются в виде логических единиц и нулей, то есть в двоичной системе счисления. Числа можно перевести из любой системы счисления в двоичную и обратно, а символы (буквы) перевести в двоичную систему нельзя. Символы не переводятся а кодируются в числа, в соответствии с используемой таблицей символов. Таблица символов это таблица в которой каждому символу соответствует число, например, символу 'J' соответствует число 74. Значит в памяти Arduino символ 'J' будет храниться как число 0b01001010 = 0x4A = 74.

Исторически сложилось так, что было создано множество таблиц символов. Виной тому и множество алфавитов различных языков, и разные взгляды на очерёдность следования символов в таблице, и стремление разработчиков уместить все символы в 1 байт, и наоборот создать универсальные кодировки ценой увеличения занимаемого места и т.д. Но в большинстве таблиц, первые 127 символов совпадают и являются знаками, числами и символами латиницы.

Ваш компьютер не является исключением, текст на нём так же хранится в виде чисел, а значит он кодируется. При этом разные файлы могут использовать разную кодировку (использовать разные таблицы символов). Значит и скетчи хранящиеся на Вашем компьютере так же используют определённую кодировку. А именно от кодировки скетча зависит как будут записаны русские символы в микроконтроллер, ведь компилятор не кодирует текст, а читает и сохраняет его числовое (кодированное) представление.

Наиболее распространёнными кодировками с поддержкой Русского языка (с использованием символов Кириллицы) являются: UTF-8, Windows-1251, CP-866, KOI-8R, ISO-8859-5. Стоит отметить что все эти кодировки представляют один символ одним однобайтным числом, кроме кодировки UTF-8 в которой один символ Кириллицы кодируется двухбайтным числом, а значит в кодировке UTF-8 строка русского текста занимает в два раза больше памяти.

Какую кодировку использует Arduino IDE:

Точно сказать какую кодировку использует Arduino IDE нельзя, так как разные её версии использовали разную кодировку. На момент написания данной статьи последняя версия Arduino IDE 1.8.5 сохраняет скетчи в кодировке UTF-8 и монитор последовательного порта этой версии использует кодировку UTF-8. Но не сохранённые скетчи используют кодировку предыдущих версий - Windows-1251.

Попробуйте в Arduino IDE 1.8.5 создать новый скетч (меню: «Файл>Новый») и напишите в нём следующий код:

void setup(){                    //
     Serial.begin(9600);         // Инициируем работу шины UART на скорости 9600 бит/сек.
     Serial.println("Привет");   // Отправляем текст в монитор последовательного порта.
}                                //
void loop(){                     //
}                                //

Загрузите скетч в Arduino (меню: «Скетч>Загрузка»). Arduino IDE предложит Вам сохранить скетч перед загрузкой, откажитесь нажав на кнопку «Отмена», начнётся загрузка скетча в Arduino. Дождитесь завершения загрузки и откройте монитор последовательного порта (меню: «Инструменты>монитор порта»). В мониторе порта вы увидите текст «⸮⸮⸮⸮⸮⸮». Дело в том, что скетч был загружен в Arduino в кодировке Windows-1251, а монитор последовательного порта использует кодировку UTF-8.

Теперь загрузите тот же скетч в Arduino (меню: «Скетч>Загрузка»), но согласитесь с сохранением скетча, а после его загрузки откройте монитор последовательного порта (меню: «Инструменты>монитор порта»). В мониторе порта вы увидите текст «Привет». Дело в том, что теперь скетч был загружен в кодировке UTF-8 и в той же кодировке работает монитор порта. Кодировки совпали и текст стал читаемым.

Если вместо строки «Привет» Вы напишете «Privet», то в обоих случаях строка корректно отобразится в мониторе порта, так как числовое представление символов латиницы совпадает в большинстве кодировок.

Запись и вывод текста в Arduino IDE на русском языке:

Как видно из предыдущего примера, кодировка выводимого текста на русском языке должна совпадать с кодировкой устройства для которого этот текст предназначен. Но многие устройства (дисплеи, модули gsm, bluetooth и т.д.) используют кодировку отличную от UTF-8 и тогда возникает вопрос, как в скетче записать текст на русском языке?

Для записи одного символа достаточно указать его код из таблицы символов (в примере указан код в 10-тичной системе счисления):

char i = 74;                     // Определяем символ с кодом 74 (это код символа 'J').
void setup(){                    //
     Serial.begin(9600);         // Инициируем работу шины UART на скорости 9600 бит/сек.
     Serial.println(i);          // Отправляем символ в монитор последовательного порта.
}                                //
void loop(){                     //
}                                //

В мониторе последовательного порта отобразится символ 'J'.

Для записи любого символа в строке нужно указать его код из таблицы символов в 8-ричной системе счисления, которому должен предшествовать обратный слеш «\». Данное правило действует для любых строк в Arduino IDE.

char i[]="\110\145\154\154\157"; // Определяем строку из 5 кодов символов "Hello". Символ конца строки добавляется автоматически.
void setup(){                    //
     Serial.begin(9600);         // Инициируем работу шины UART на скорости 9600 бит/сек.
     Serial.println(i);          // Отправляем строку в монитор последовательного порта.
}                                //
void loop(){                     //
}                                //

Не смотря на то что запись строки «i» кажется громоздкой, она занимает всего 6 байт (5 символов + автоматически добавленный символ конца строки). В мониторе последовательного порта отобразится строка "Hello".

Для записи символов и строк на русском языке действуют те же правила:

char i[] = "\320\237\321\200\320\270\320\262\320\265\321\202"; // текст "Привет" в кодировке UTF-8.
char j[] = "\317\360\350\342\345\362"; // текст "Привет" в кодировке Windows-1251.
char k[] = "\217\340\250\242\245\342"; // текст "Привет" в кодировке CP-866.
char l[] = "\360\322\311\327\305\324"; // текст "Привет" в кодировке KOI-8R.
char m[] = "\277\340\330\322\325\342"; // текст "Привет" в кодировке ISO-8859-5.
char n[] = "Привет";                   // текст "Привет" в кодировке файла скетча.

В данном примере строки «j», «k», «l» и «m» занимают по 7 байт (6 символов + автоматически добавленный символ конца строки), а строка «i» занимает 13 байт (6 символов по 2 байта каждый + автоматически добавленный символ конца строки). Строка «n» может занимать либо 7, либо 13 байт, это зависит от кодировки используемой Arduino IDE.

Если в тексте с символами Кириллицы присутствуют числа, знаки или символы латиницы, то символы Кириллицы пишутся кодами, а символы знаков, цифр и латиницы можно писать символами, так как они будут корректно отображаться для практически любой кодировки.

char m[] = "\277\340\330\322\325\342 - Hello"; // текст "Привет - Hello" в кодировке ISO-8859-5.

Таблица символов:

В таблице каждому символу сопоставлен его код в десятичной, шестнадцатеричной и восьмеричной системах счисления. Для указания символа в строке, используется его код записанный в восьмеричной системе счисления (указан в таблице серым цветом и начинается обратным слешем).

Симв: UTF-8 Win-1251 CP-866 KOI-8R ISO-8859-5
пробел 32 0x20 \40
32 0x20 \40 32 0x20 \40 32 0x20 \40 32 0x20 \40
! 33 0x21 \41 33 0x21 \41 33 0x21 \41 33 0x21 \41 33 0x21 \41
" 34 0x22 \42 34 0x22 \42 34 0x22 \42 34 0x22 \42 34 0x22 \42
# 35 0x23 \43 35 0x23 \43 35 0x23 \43 35 0x23 \43 35 0x23 \43
$ 36 0x24 \44 36 0x24 \44 36 0x24 \44 36 0x24 \44 36 0x24 \44
% 37 0x25 \45 37 0x25 \45 37 0x25 \45 37 0x25 \45 37 0x25 \45
& 38 0x26 \46 38 0x26 \46 38 0x26 \46 38 0x26 \46 38 0x26 \46
' 39 0x27 \47 39 0x27 \47 39 0x27 \47 39 0x27 \47 39 0x27 \74
( 40 0x28 \50 40 0x28 \50 40 0x28 \50 40 0x28 \50 40 0x28 \50
) 41 0x29 \51 41 0x29 \51 41 0x29 \51 41 0x29 \51 41 0x29 \51
* 42 0x2A \52 42 0x2A \52 42 0x2A \52 42 0x2A \52 42 0x2A \52
+ 43 0x2B \53 43 0x2B \53 43 0x2B \53 43 0x2B \53 43 0x2B \53
, 44 0x2C \54 44 0x2C \54 44 0x2C \54 44 0x2C \54 44 0x2C \54
- 45 0x2D \55 45 0x2D \55 45 0x2D \55 45 0x2D \55 45 0x2D \55
. 46 0x2E \56 46 0x2E \56 46 0x2E \56 46 0x2E \56 46 0x2E \56
/ 47 0x2F \57 47 0x2F \57 47 0x2F \57 47 0x2F \57 47 0x2F \57
UTF-8 Win-1251 CP-866 KOI-8R ISO-8859-5
0 48 0x30 \60
48 0x30 \60 48 0x30 \60 48 0x30 \60 48 0x30 \60
1 49 0x31 \61 49 0x31 \61 49 0x31 \61 49 0x31 \61 49 0x31 \61
2 50 0x32 \62 50 0x32 \62 50 0x32 \62 50 0x32 \62 50 0x32 \62
3 51 0x33 \63 51 0x33 \63 51 0x33 \63 51 0x33 \63 51 0x33 \63
4 52 0x34 \64 52 0x34 \64 52 0x34 \64 52 0x34 \64 52 0x34 \64
5 53 0x35 \65 53 0x35 \65 53 0x35 \65 53 0x35 \65 53 0x35 \65
6 54 0x36 \66 54 0x36 \66 54 0x36 \66 54 0x36 \66 54 0x36 \66
7 55 0x37 \67 55 0x37 \67 55 0x37 \67 55 0x37 \67 55 0x37 \74
8 56 0x38 \70 56 0x38 \70 56 0x38 \70 56 0x38 \70 56 0x38 \70
9 57 0x39 \71 57 0x39 \71 57 0x39 \71 57 0x39 \71 57 0x39 \71
: 58 0x3A \72 58 0x3A \72 58 0x3A \72 58 0x3A \72 58 0x3A \72
; 59 0x3B \73 59 0x3B \73 59 0x3B \73 59 0x3B \73 59 0x3B \73
< 60 0x3C \74 60 0x3C \74 60 0x3C \74 60 0x3C \74 60 0x3C \74
= 61 0x3D \75 61 0x3D \75 61 0x3D \75 61 0x3D \75 61 0x3D \75
> 62 0x3E \76 62 0x3E \76 62 0x3E \76 62 0x3E \76 62 0x3E \76
? 63 0x3F \77 63 0x3F \77 63 0x3F \77 63 0x3F \77 63 0x3F \77
UTF-8 Win-1251 CP-866 KOI-8R ISO-8859-5
@ 64 0x40 \100
64 0x40 \100 64 0x40 \100 64 0x40 \100 64 0x40 \100
A 65 0x41 \101 65 0x41 \101 65 0x41 \101 65 0x41 \101 65 0x41 \101
B 66 0x42 \102 66 0x42 \102 66 0x42 \102 66 0x42 \102 66 0x42 \102
C 67 0x43 \103 67 0x43 \103 67 0x43 \103 67 0x43 \103 67 0x43 \103
D 68 0x44 \104 68 0x44 \104 68 0x44 \104 68 0x44 \104 68 0x44 \104
E 69 0x45 \105 69 0x45 \105 69 0x45 \105 69 0x45 \105 69 0x45 \105
F 70 0x46 \106 70 0x46 \106 70 0x46 \106 70 0x46 \106 70 0x46 \106
G 71 0x47 \107 71 0x47 \107 71 0x47 \107 71 0x47 \107 71 0x47 \114
H 72 0x48 \110 72 0x48 \110 72 0x48 \110 72 0x48 \110 72 0x48 \110
I 73 0x49 \111 73 0x49 \111 73 0x49 \111 73 0x49 \111 73 0x49 \111
J 74 0x4A \112 74 0x4A \112 74 0x4A \112 74 0x4A \112 74 0x4A \112
K 75 0x4B \113 75 0x4B \113 75 0x4B \113 75 0x4B \113 75 0x4B \113
L 76 0x4C \114 76 0x4C \114 76 0x4C \114 76 0x4C \114 76 0x4C \114
M 77 0x4D \115 77 0x4D \115 77 0x4D \115 77 0x4D \115 77 0x4D \115
N 78 0x4E \116 78 0x4E \116 78 0x4E \116 78 0x4E \116 78 0x4E \116
O 79 0x4F \117 79 0x4F \117 79 0x4F \117 79 0x4F \117 79 0x4F \117
UTF-8 Win-1251 CP-866 KOI-8R ISO-8859-5
P 80 0x50 \120
80 0x50 \120 80 0x50 \120 80 0x50 \120 80 0x50 \120
Q 81 0x51 \121 81 0x51 \121 81 0x51 \121 81 0x51 \121 81 0x51 \121
R 82 0x52 \122 82 0x52 \122 82 0x52 \122 82 0x52 \122 82 0x52 \122
S 83 0x53 \123 83 0x53 \123 83 0x53 \123 83 0x53 \123 83 0x53 \123
T 84 0x54 \124 84 0x54 \124 84 0x54 \124 84 0x54 \124 84 0x54 \124
U 85 0x55 \125 85 0x55 \125 85 0x55 \125 85 0x55 \125 85 0x55 \125
V 86 0x56 \126 86 0x56 \126 86 0x56 \126 86 0x56 \126 86 0x56 \126
W 87 0x57 \127 87 0x57 \127 87 0x57 \127 87 0x57 \127 87 0x57 \134
X 88 0x58 \130 88 0x58 \130 88 0x58 \130 88 0x58 \130 88 0x58 \130
Y 89 0x59 \131 89 0x59 \131 89 0x59 \131 89 0x59 \131 89 0x59 \131
Z 90 0x5A \132 90 0x5A \132 90 0x5A \132 90 0x5A \132 90 0x5A \132
[ 91 0x5B \133 91 0x5B \133 91 0x5B \133 91 0x5B \133 91 0x5B \133
\ 92 0x5C \134 92 0x5C \134 92 0x5C \134 92 0x5C \134 92 0x5C \134
] 93 0x5D \135 93 0x5D \135 93 0x5D \135 93 0x5D \135 93 0x5D \135
^ 94 0x5E \136 94 0x5E \136 94 0x5E \136 94 0x5E \136 94 0x5E \136
_ 95 0x5F \137 95 0x5F \137 95 0x5F \137 95 0x5F \137 95 0x5F \137
UTF-8 Win-1251 CP-866 KOI-8R ISO-8859-5
` 96 0x60 \140
96 0x60 \140 96 0x60 \140 96 0x60 \140 96 0x60 \140
a 97 0x61 \141 97 0x61 \141 97 0x61 \141 97 0x61 \141 97 0x61 \141
b 98 0x62 \142 98 0x62 \142 98 0x62 \142 98 0x62 \142 98 0x62 \142
c 99 0x63 \143 99 0x63 \143 99 0x63 \143 99 0x63 \143 99 0x63 \143
d 100 0x64 \144 100 0x64 \144 100 0x64 \144 100 0x64 \144 100 0x64 \144
e 101 0x65 \145 101 0x65 \145 101 0x65 \145 101 0x65 \145 101 0x65 \145
f 102 0x66 \146 102 0x66 \146 102 0x66 \146 102 0x66 \146 102 0x66 \146
g 103 0x67 \147 103 0x67 \147 103 0x67 \147 103 0x67 \147 103 0x67 \154
h 104 0x68 \150 104 0x68 \150 104 0x68 \150 104 0x68 \150 104 0x68 \150
i 105 0x69 \151 105 0x69 \151 105 0x69 \151 105 0x69 \151 105 0x69 \151
j 106 0x6A \152 106 0x6A \152 106 0x6A \152 106 0x6A \152 106 0x6A \152
k 107 0x6B \153 107 0x6B \153 107 0x6B \153 107 0x6B \153 107 0x6B \153
l 108 0x6C \154 108 0x6C \154 108 0x6C \154 108 0x6C \154 108 0x6C \154
m 109 0x6D \155 109 0x6D \155 109 0x6D \155 109 0x6D \155 109 0x6D \155
n 110 0x6E \156 110 0x6E \156 110 0x6E \156 110 0x6E \156 110 0x6E \156
o 111 0x6F \157 111 0x6F \157 111 0x6F \157 111 0x6F \157 111 0x6F \157
UTF-8 Win-1251 CP-866 KOI-8R ISO-8859-5
p 112 0x70 \160
112 0x70 \160 112 0x70 \160 112 0x70 \160 112 0x70 \160
q 113 0x71 \161 113 0x71 \161 113 0x71 \161 113 0x71 \161 113 0x71 \161
r 114 0x72 \162 114 0x72 \162 114 0x72 \162 114 0x72 \162 114 0x72 \162
s 115 0x73 \163 115 0x73 \163 115 0x73 \163 115 0x73 \163 115 0x73 \163
t 116 0x74 \164 116 0x74 \164 116 0x74 \164 116 0x74 \164 116 0x74 \164
u 117 0x75 \165 117 0x75 \165 117 0x75 \165 117 0x75 \165 117 0x75 \165
v 118 0x76 \166 118 0x76 \166 118 0x76 \166 118 0x76 \166 118 0x76 \166
w 119 0x77 \167 119 0x77 \167 119 0x77 \167 119 0x77 \167 119 0x77 \174
x 120 0x78 \170 120 0x78 \170 120 0x78 \170 120 0x78 \170 120 0x78 \170
y 121 0x79 \171 121 0x79 \171 121 0x79 \171 121 0x79 \171 121 0x79 \171
z 122 0x7A \172 122 0x7A \172 122 0x7A \172 122 0x7A \172 122 0x7A \172
{ 123 0x7B \173 123 0x7B \173 123 0x7B \173 123 0x7B \173 123 0x7B \173
| 124 0x7C \174 124 0x7C \174 124 0x7C \174 124 0x7C \174 124 0x7C \174
} 125 0x7D \175 125 0x7D \175 125 0x7D \175 125 0x7D \175 125 0x7D \175
~ 126 0x7E \176 126 0x7E \176 126 0x7E \176 126 0x7E \176 126 0x7E \176
127 0x7F \177 127 0x7F \177 127 0x7F \177 127 0x7F \177 127 0x7F \177
UTF-8 Win-1251 CP-866 KOI-8R ISO-8859-5
А 208, 144 0xD0, 0x90 \320\220 192 0xC0 \300 128 0x80 \200 225 0xE1 \341 176 0xB0 \260
Б 208, 145 0xD0, 0x91 \320\221 193 0xC1 \301 129 0x81 \201 226 0xE2 \342 177 0xB1 \261
В 208, 146 0xD0, 0x92 \320\222 194 0xC2 \302 130 0x82 \202 247 0xF7 \367 178 0xB2 \262
Г 208, 147 0xD0, 0x93 \320\223 195 0xC3 \303 131 0x83 \203 231 0xE7 \347 179 0xB3 \263
Д 208, 148 0xD0, 0x94 \320\224 196 0xC4 \304 132 0x84 \204 228 0xE4 \344 180 0xB4 \264
Е 208, 149 0xD0, 0x95 \320\225 197 0xC5 \305 133 0x85 \205 229 0xE5 \345 181 0xB5 \265
Ж 208, 150 0xD0, 0x96 \320\226 198 0xC6 \306 134 0x86 \206 246 0xF6 \366 182 0xB6 \266
З 208, 151 0xD0, 0x97 \320\227 199 0xC7 \307 135 0x87 \207 250 0xFA \372 183 0xB7 \267
И 208, 152 0xD0, 0x98 \320\230 200 0xC8 \310 136 0x88 \210 233 0xE9 \351 184 0xB8 \270
Й 208, 153 0xD0, 0x99 \320\231 201 0xC9 \311 137 0x89 \211 234 0xEA \352 185 0xB9 \271
К 208, 154 0xD0, 0x9A \320\232 202 0xCA \312 138 0x8A \212 235 0xEB \353 186 0xBA \272
Л 208, 155 0xD0, 0x9B \320\233 203 0xCB \313 139 0x8B \213 236 0xEC \354 187 0xBB \273
М 208, 156 0xD0, 0x9C \320\234 204 0xCC \314 140 0x8C \214 237 0xED \355 188 0xBC \274
Н 208, 157 0xD0, 0x9D \320\235 205 0xCD \315 141 0x8D \215 238 0xEE \356 189 0xBD \275
О 208, 158 0xD0, 0x9E \320\236 206 0xCE \316 142 0x8E \216 239 0xEF \357 190 0xBE \276
П 208, 159 0xD0, 0x9F \320\237 207 0xCF \317 143 0x8F \217 240 0xF0 \360 191 0xBF \277
UTF-8 Win-1251 CP-866 KOI-8R ISO-8859-5
Р 208, 160 0xD0, 0xA0 \320\240 208 0xD0 \320 144 0x90 \220 242 0xF2 \362 192 0xC0 \300
С 208, 161 0xD0, 0xA1 \320\241 209 0xD1 \321 145 0x91 \221 243 0xF3 \363 193 0xC1 \301
Т 208, 162 0xD0, 0xA2 \320\242 210 0xD2 \322 146 0x92 \222 244 0xF4 \364 194 0xC2 \302
У 208, 163 0xD0, 0xA3 \320\243 211 0xD3 \323 147 0x93 \223 245 0xF5 \365 195 0xC3 \303
Ф 208, 164 0xD0, 0xA4 \320\244 212 0xD4 \324 148 0x94 \224 230 0xE6 \346 196 0xC4 \304
Х 208, 165 0xD0, 0xA5 \320\245 213 0xD5 \325 149 0x95 \225 232 0xE8 \350 197 0xC5 \305
Ц 208, 166 0xD0, 0xA6 \320\246 214 0xD6 \326 150 0x96 \226 227 0xE3 \343 198 0xC6 \306
Ч 208, 167 0xD0, 0xA7 \320\247 215 0xD7 \327 151 0x97 \227 254 0xFE \376 199 0xC7 \307
Ш 208, 168 0xD0, 0xA8 \320\250 216 0xD8 \330 152 0x98 \230 251 0xFB \373 200 0xC8 \310
Щ 208, 169 0xD0, 0xA9 \320\251 217 0xD9 \331 153 0x99 \231 253 0xFD \375 201 0xC9 \311
Ъ 208, 170 0xD0, 0xAA \320\252 218 0xDA \332 154 0x9A \232 255 0xFF \377 202 0xCA \312
Ы 208, 171 0xD0, 0xAB \320\253 219 0xDB \333 155 0x9B \233 249 0xF9 \371 203 0xCB \313
Ь 208, 172 0xD0, 0xAC \320\254 220 0xDC \334 156 0x9C \234 248 0xF8 \370 204 0xCC \314
Э 208, 173 0xD0, 0xAD \320\255 221 0xDD \335 157 0x9D \235 252 0xFC \374 205 0xCD \315
Ю 208, 174 0xD0, 0xAE \320\256 222 0xDE \336 158 0x9E \236 224 0xE0 \340 206 0xCE \316
Я 208, 175 0xD0, 0xAF \320\257 223 0xDF \337 159 0x9F \237 241 0xF1 \361 207 0xCF \317
UTF-8 Win-1251 CP-866 KOI-8R ISO-8859-5
а 208, 176 0xD0, 0xB0 \320\260 224 0xE0 \340 160 0xA0 \240 193 0xC1 \301 208 0xD0 \320
б 208, 177 0xD0, 0xB1 \320\261 225 0xE1 \341 161 0xA1 \241 194 0xC2 \302 209 0xD1 \321
в 208, 178 0xD0, 0xB2 \320\262 226 0xE2 \342 162 0xA2 \242 215 0xD7 \327 210 0xD2 \322
г 208, 179 0xD0, 0xB3 \320\263 227 0xE3 \343 163 0xA3 \243 199 0xC7 \307 211 0xD3 \323
д 208, 180 0xD0, 0xB4 \320\264 228 0xE4 \344 164 0xA4 \244 196 0xC4 \304 212 0xD4 \324
е 208, 181 0xD0, 0xB5 \320\265 229 0xE5 \345 165 0xA5 \245 197 0xC5 \305 213 0xD5 \325
ж 208, 182 0xD0, 0xB6 \320\266 230 0xE6 \346 166 0xA6 \246 214 0xD6 \326 214 0xD6 \326
з 208, 183 0xD0, 0xB7 \320\267 231 0xE7 \347 167 0xA7 \247 218 0xDA \332 215 0xD7 \327
и 208, 184 0xD0, 0xB8 \320\270 232 0xE8 \350 168 0xA8 \250 201 0xC9 \311 216 0xD8 \330
й 208, 185 0xD0, 0xB9 \320\271 233 0xE9 \351 169 0xA9 \251 202 0xCA \312 217 0xD9 \331
к 208, 186 0xD0, 0xBA \320\272 234 0xEA \352 170 0xAA \252 203 0xCB \313 218 0xDA \332
л 208, 187 0xD0, 0xBB \320\273 235 0xEB \353 171 0xAB \253 204 0xCC \314 219 0xDB \333
м 208, 188 0xD0, 0xBC \320\274 236 0xEC \354 172 0xAC \254 205 0xCD \315 220 0xDC \334
н 208, 189 0xD0, 0xBD \320\275 237 0xED \355 173 0xAD \255 206 0xCE \316 221 0xDD \335
о 208, 190 0xD0, 0xBE \320\276 238 0xEE \356 174 0xAE \256 207 0xCF \317 222 0xDE \336
п 208, 191 0xD0, 0xBF \320\277 239 0xEF \357 175 0xAF \257 208 0xD0 \320 223 0xDF \337
UTF-8 Win-1251 CP-866 KOI-8R ISO-8859-5
р 209, 128 0xD1, 0x80 \321\200 240 0xF0 \360 224 0xE0 \340 210 0xD2 \322 224 0xE0 \340
с 209, 129 0xD1, 0x81 \321\201 241 0xF1 \361 225 0xE1 \341 211 0xD3 \323 225 0xE1 \341
т 209, 130 0xD1, 0x82 \321\202 242 0xF2 \362 226 0xE2 \342 212 0xD4 \324 226 0xE2 \342
у 209, 131 0xD1, 0x83 \321\203 243 0xF3 \363 227 0xE3 \343 213 0xD5 \325 227 0xE3 \343
ф 209, 132 0xD1, 0x84 \321\204 244 0xF4 \364 228 0xE4 \344 198 0xC6 \306 228 0xE4 \344
х 209, 133 0xD1, 0x85 \321\205 245 0xF5 \365 229 0xE5 \345 200 0xC8 \310 229 0xE5 \345
ц 209, 134 0xD1, 0x86 \321\206 246 0xF6 \366 230 0xE6 \346 195 0xC3 \303 230 0xE6 \346
ч 209, 135 0xD1, 0x87 \321\207 247 0xF7 \367 231 0xE7 \347 222 0xDE \336 231 0xE7 \347
ш 209, 136 0xD1, 0x88 \321\210 248 0xF8 \370 232 0xE8 \350 219 0xDB \333 232 0xE8 \350
щ 209, 137 0xD1, 0x89 \321\211 249 0xF9 \371 233 0xE9 \351 221 0xDD \335 233 0xE9 \351
ъ 209, 138 0xD1, 0x8A \321\212 250 0xFA \372 234 0xEA \352 223 0xDF \337 234 0xEA \352
ы 209, 139 0xD1, 0x8B \321\213 251 0xFB \373 235 0xEB \353 217 0xD9 \331 235 0xEB \353
ь 209, 140 0xD1, 0x8C \321\214 252 0xFC \374 236 0xEC \354 216 0xD8 \330 236 0xEC \354
э 209, 141 0xD1, 0x8D \321\215 253 0xFD \375 237 0xED \355 220 0xDC \334 237 0xED \355
ю 209, 142 0xD1, 0x8E \321\216 254 0xFE \376 238 0xEE \356 192 0xC0 \300 238 0xEE \356
я 209, 143 0xD1, 0x8F \321\217 255 0xFF \377 239 0xEF \357 209 0xD1 \321 239 0xEF \357
UTF-8 Win-1251 CP-866 KOI-8R ISO-8859-5
Ё 208, 129 0xD0, 0x81 \320\201 168 0xA8 \250 240 0xF0 \360 179 0xB3 \263 161 0xA1 \241
ё 209, 145 0xD1, 0x91 \321\221 184 0xB8 \270 241 0xF1 \361 163 0xA3 \243 241 0xF1 \361

В данной таблице символов указаны сразу 5 кодировок: «UTF-8», «Windows-1251», «CP-866», «KOI-8R» и «ISO-8859-5». Коды символов от 0 до 127 совпадают для всех кодировок. В кодировке «UTF-8» символы Кириллицы занимают 2 байта, следовательно, для них указано 2 числа.

Стоит отметить кодировку «KOI-8R» в которой (в отличии от остальных) на первый взгляд не просматривается закономерность следования кодов, но на самом деле закономерность есть и заключается она в том, что если сбросить старший бит, то код символа Кириллицы превратится в код сходного по произношению символа латиницы, и наоборот. Например символ «л» записывается кодом 0xCC, если сбросить старший бит то получится 0x4C, а это код символа «L». Значит, если в тексте из символов Кириллицы сбросить старшие биты кода каждого символа, то получится «читаемый» текст из символов латиницы, подобный транслиту.

Примечание:

К недостаткам записи строк кодами символов относится то, что строки в скетче становятся не удобочитаемыми. В качестве альтернативного варианта можно создать функцию преобразования кодировки строк перед их выводом, или хранить строки из символов Кириллицы в отдельном, подключаемом, файле, который будет сохранён в требуемой для вывода кодировке.

Обсуждение