Кодировки 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». Значит, если в тексте из символов Кириллицы сбросить старшие биты кода каждого символа, то получится «читаемый» текст из символов латиницы, подобный транслиту.

Примечание:

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