Windows-1251 Table
| Byte | Char | Unicode | Dec | Note |
|---|---|---|---|---|
| 80 | Ђ | U+0402 | 128 | Serbian/Macedonian letter row |
| 81 | Ѓ | U+0403 | 129 | |
| 82 | ‚ | U+201A | 130 | |
| 83 | ѓ | U+0453 | 131 | |
| 84 | „ | U+201E | 132 | |
| 85 | … | U+2026 | 133 | |
| 86 | † | U+2020 | 134 | |
| 87 | ‡ | U+2021 | 135 | |
| 88 | € | U+20AC | 136 | euro sign - same slot as Windows-1252 |
| 89 | ‰ | U+2030 | 137 | |
| 8A | Љ | U+0409 | 138 | |
| 8B | ‹ | U+2039 | 139 | |
| 8C | Њ | U+040A | 140 | |
| 8D | Ќ | U+040C | 141 | |
| 8E | Ћ | U+040B | 142 | |
| 8F | Џ | U+040F | 143 | |
| 90 | ђ | U+0452 | 144 | |
| 91 | ‘ | U+2018 | 145 | |
| 92 | ’ | U+2019 | 146 | |
| 93 | “ | U+201C | 147 | |
| 94 | ” | U+201D | 148 | |
| 95 | • | U+2022 | 149 | |
| 96 | – | U+2013 | 150 | |
| 97 | — | U+2014 | 151 | |
| 98 | – | – | 152 | the only undefined byte in the whole code page |
| 99 | ™ | U+2122 | 153 | trademark - same slot as Windows-1252 |
| 9A | љ | U+0459 | 154 | |
| 9B | › | U+203A | 155 | |
| 9C | њ | U+045A | 156 | |
| 9D | ќ | U+045C | 157 | |
| 9E | ћ | U+045B | 158 | |
| 9F | џ | U+045F | 159 | |
| A0 | U+00A0 | 160 | supplementary letters (Ukrainian/Belarusian/Bulgarian) | |
| A1 | Ў | U+040E | 161 | |
| A2 | ў | U+045E | 162 | |
| A3 | Ј | U+0408 | 163 | |
| A4 | ¤ | U+00A4 | 164 | |
| A5 | Ґ | U+0490 | 165 | |
| A6 | ¦ | U+00A6 | 166 | |
| A7 | § | U+00A7 | 167 | |
| A8 | Ё | U+0401 | 168 | Russian capital Yo |
| A9 | © | U+00A9 | 169 | |
| AA | Є | U+0404 | 170 | |
| AB | « | U+00AB | 171 | |
| AC | ¬ | U+00AC | 172 | |
| AD | | U+00AD | 173 | soft hyphen (SHY) |
| AE | ® | U+00AE | 174 | |
| AF | Ї | U+0407 | 175 | |
| B0 | ° | U+00B0 | 176 | |
| B1 | ± | U+00B1 | 177 | |
| B2 | І | U+0406 | 178 | |
| B3 | і | U+0456 | 179 | |
| B4 | ґ | U+0491 | 180 | |
| B5 | µ | U+00B5 | 181 | |
| B6 | ¶ | U+00B6 | 182 | |
| B7 | · | U+00B7 | 183 | |
| B8 | ё | U+0451 | 184 | Russian lowercase yo |
| B9 | № | U+2116 | 185 | numero sign - the Cyrillic page kept the Latin typographic sign |
| BA | є | U+0454 | 186 | |
| BB | » | U+00BB | 187 | |
| BC | ј | U+0458 | 188 | |
| BD | Ѕ | U+0405 | 189 | |
| BE | ѕ | U+0455 | 190 | |
| BF | ї | U+0457 | 191 | |
| C0 | А | U+0410 | 192 | Russian alphabet block starts |
| C1 | Б | U+0411 | 193 | |
| C2 | В | U+0412 | 194 | |
| C3 | Г | U+0413 | 195 | |
| C4 | Д | U+0414 | 196 | |
| C5 | Е | U+0415 | 197 | |
| C6 | Ж | U+0416 | 198 | |
| C7 | З | U+0417 | 199 | |
| C8 | И | U+0418 | 200 | |
| C9 | Й | U+0419 | 201 | |
| CA | К | U+041A | 202 | |
| CB | Л | U+041B | 203 | |
| CC | М | U+041C | 204 | |
| CD | Н | U+041D | 205 | |
| CE | О | U+041E | 206 | |
| CF | П | U+041F | 207 | |
| D0 | Р | U+0420 | 208 | |
| D1 | С | U+0421 | 209 | |
| D2 | Т | U+0422 | 210 | |
| D3 | У | U+0423 | 211 | |
| D4 | Ф | U+0424 | 212 | |
| D5 | Х | U+0425 | 213 | |
| D6 | Ц | U+0426 | 214 | |
| D7 | Ч | U+0427 | 215 | |
| D8 | Ш | U+0428 | 216 | |
| D9 | Щ | U+0429 | 217 | |
| DA | Ъ | U+042A | 218 | |
| DB | Ы | U+042B | 219 | |
| DC | Ь | U+042C | 220 | |
| DD | Э | U+042D | 221 | |
| DE | Ю | U+042E | 222 | |
| DF | Я | U+042F | 223 | |
| E0 | а | U+0430 | 224 | |
| E1 | б | U+0431 | 225 | |
| E2 | в | U+0432 | 226 | |
| E3 | г | U+0433 | 227 | |
| E4 | д | U+0434 | 228 | |
| E5 | е | U+0435 | 229 | |
| E6 | ж | U+0436 | 230 | |
| E7 | з | U+0437 | 231 | |
| E8 | и | U+0438 | 232 | |
| E9 | й | U+0439 | 233 | |
| EA | к | U+043A | 234 | |
| EB | л | U+043B | 235 | |
| EC | м | U+043C | 236 | |
| ED | н | U+043D | 237 | |
| EE | о | U+043E | 238 | |
| EF | п | U+043F | 239 | |
| F0 | р | U+0440 | 240 | |
| F1 | с | U+0441 | 241 | |
| F2 | т | U+0442 | 242 | |
| F3 | у | U+0443 | 243 | |
| F4 | ф | U+0444 | 244 | |
| F5 | х | U+0445 | 245 | |
| F6 | ц | U+0446 | 246 | |
| F7 | ч | U+0447 | 247 | |
| F8 | ш | U+0448 | 248 | |
| F9 | щ | U+0449 | 249 | |
| FA | ъ | U+044A | 250 | |
| FB | ы | U+044B | 251 | |
| FC | ь | U+044C | 252 | |
| FD | э | U+044D | 253 | |
| FE | ю | U+044E | 254 | |
| FF | я | U+044F | 255 |
| Byte | Windows-1251 | Unicode | Windows-1252 has |
|---|---|---|---|
| 80 | Ђ | U+0402 | € |
| 81 | Ѓ | U+0403 | (undefined) |
| 83 | ѓ | U+0453 | ƒ |
| 88 | € | U+20AC | ˆ |
| 8A | Љ | U+0409 | Š |
| 8C | Њ | U+040A | Œ |
| 8D | Ќ | U+040C | (undefined) |
| 8E | Ћ | U+040B | Ž |
| 8F | Џ | U+040F | (undefined) |
| 90 | ђ | U+0452 | (undefined) |
| 98 | (undefined) | – | ˜ |
| 9A | љ | U+0459 | š |
| 9C | њ | U+045A | œ |
| 9D | ќ | U+045C | (undefined) |
| 9E | ћ | U+045B | ž |
| 9F | џ | U+045F | Ÿ |
Windows-1251 - code page 1251, CP-1251 - is the byte format of the Cyrillic web: Wikipedia defines it as an 8-bit character encoding designed to cover languages that use the Cyrillic script such as Russian, Ukrainian, Belarusian, Bulgarian, Serbian Cyrillic, Macedonian and other languages. Per its official registry entry it is published by Microsoft under the alias cp1251 and standardized by the WHATWG Encoding Standard, and it is still measurably alive: as of January 2024, 0.3% of all websites use Windows-1251 - which makes it the second most-used single-byte character encoding on the web (third overall) and the most used of the single-byte encodings supporting Cyrillic.
The table above lists all 128 high bytes (0x80-0xFF) with their characters, Unicode code points and decimal values. Only one byte is undefined - 0x98 - and the rest splits into three stories: the 0xC0-0xFF block is the Russian alphabet from А to я, the 0x80-0x9F row mixes typography with the Serbian, Macedonian and Ukrainian letters that never fit elsewhere, and 0xA0-0xBF carries the remaining supplementary letters. A second chart isolates the 16 bytes in 0x80-0x9F where Windows-1251 disagrees with Windows-1252 - the two ANSI siblings share curly quotes, dashes and the euro sign, and swap letters everywhere else.
Its sibling rivalry is KOI8-R, and the score is one-sided: Wikipedia notes that Windows-1251 and KOI8-R are much more commonly used than ISO 8859-5 (which is used by less than 0.0004% of websites) - ISO’s own Cyrillic page lost so hard it is a rounding error. The practical takeaway for anyone meeting mojibake: Russian text pastes as "привет"-shaped garbage when UTF-8 bytes are decoded as CP-1251, and this table is the decoder ring - find the first garbage glyph, read back its byte, and you know what was mangled.
How to use
- Read mojibake by its signature: text that shows Р-heavy garbage where Russian should be is UTF-8 bytes decoded as Windows-1251. Find the first garbage character in the Char column, note its byte, and compare with the UTF-8 encoding table on this site to reconstruct the original three-byte sequence.
- Use the Dec column for Alt codes and legacy data entry: Windows Alt+0171 produces « because 171 decimal is byte 0xAB in this chart. Legacy databases, CSV exports and old CMS instances across ex-Soviet markets are still commonly CP-1251 - byte-level tools reference this numeric identity.
- Do not declare Windows-1251 for new work: the WHATWG Encoding Standard governs this label, and UTF-8 is the web default (99%+ of pages). Keep this table for reading old data - when you need the escape hatch, the UTF-8 encoding table on this site shows where the modern bytes come from.
Frequently asked questions
Is Windows-1251 the same thing as ISO 8859-5?
No - they are unrelated layouts that both encode Cyrillic. Wikipedia’s registry entry explicitly notes Windows-1251 is not related to ISO-8859-5, and the market decided decisively: Windows-1251 and KOI8-R are used far more than ISO 8859-5, which sits below 0.0004% of websites. In ISO 8859-5 the alphabet runs in order (А is 0xB0); in Windows-1251 the letters are scattered so Ukrainian, Serbian, Macedonian and Bulgarian letters could all fit - which is exactly what the 0x80-0xBF rows in this chart show.
Why does Russian text paste as garbage like "РїСЂР"?
That is UTF-8 read as Windows-1251. The word привет is stored in UTF-8 as the bytes D0 BF D1 80 D0 B8 D0 B2 D0 B5 D1 82; decoded as CP-1251 those same bytes produce "привет". The signature is reliable: Р and С leading every pair means a Cyrillic UTF-8 source decoded as CP-1251. Fix it by re-decoding as UTF-8, not by editing the text.
What is special about byte 0x98?
It is the single undefined byte in the entire code page - Microsoft’s published mapping marks it UNDEFINED, and Python’s cp1251 codec throws on it while every other byte decodes. It is the CP-1251 counterpart of the famous 0x81/0x8D/0x8F/0x90/0x9D holes in Windows-1252: high-byte slots that were never given a character.
Does Windows-1251 have the euro sign and the numero sign?
Both: the euro is byte 0x88 (U+20AC, the same slot as in Windows-1252), and the numero sign № is byte 0xB9 (U+2116) - the chart above flags both rows. The capital/small Yo pair Ё/ё sits at 0xA8/0xB8, and the soft hyphen at 0xAD completes the typographic set.
Should I use Windows-1251 or UTF-8 today?
UTF-8, for anything new. Windows-1251’s 0.3% share (as of January 2024) is legacy maintenance, not a live choice: it cannot cover even all Cyrillic-derived scripts comfortably, while UTF-8 encodes every script plus emoji in a self-synchronizing byte format. Use this table to read old data and to decode mojibake - the Windows-1252 table on this site covers its Western sibling, and the ISO 8859-1 table covers the base they both replaced.