Windows-1251 Table

–table rows verified
ByteCharUnicodeDecNote
80ЂU+0402128Serbian/Macedonian letter row
81ЃU+0403129
82‚U+201A130
83ѓU+0453131
84„U+201E132
85…U+2026133
86†U+2020134
87‡U+2021135
88€U+20AC136euro sign - same slot as Windows-1252
89‰U+2030137
8AЉU+0409138
8B‹U+2039139
8CЊU+040A140
8DЌU+040C141
8EЋU+040B142
8FЏU+040F143
90ђU+0452144
91‘U+2018145
92’U+2019146
93“U+201C147
94”U+201D148
95•U+2022149
96–U+2013150
97—U+2014151
98––152the only undefined byte in the whole code page
99™U+2122153trademark - same slot as Windows-1252
9AљU+0459154
9B›U+203A155
9CњU+045A156
9DќU+045C157
9EћU+045B158
9FџU+045F159
A0 U+00A0160supplementary letters (Ukrainian/Belarusian/Bulgarian)
A1ЎU+040E161
A2ўU+045E162
A3ЈU+0408163
A4¤U+00A4164
A5ҐU+0490165
A6¦U+00A6166
A7§U+00A7167
A8ЁU+0401168Russian capital Yo
A9©U+00A9169
AAЄU+0404170
AB«U+00AB171
AC¬U+00AC172
AD­U+00AD173soft hyphen (SHY)
AE®U+00AE174
AFЇU+0407175
B0°U+00B0176
B1±U+00B1177
B2ІU+0406178
B3іU+0456179
B4ґU+0491180
B5µU+00B5181
B6U+00B6182
B7·U+00B7183
B8ёU+0451184Russian lowercase yo
B9№U+2116185numero sign - the Cyrillic page kept the Latin typographic sign
BAєU+0454186
BB»U+00BB187
BCјU+0458188
BDЅU+0405189
BEѕU+0455190
BFїU+0457191
C0АU+0410192Russian alphabet block starts
C1БU+0411193
C2ВU+0412194
C3ГU+0413195
C4ДU+0414196
C5ЕU+0415197
C6ЖU+0416198
C7ЗU+0417199
C8ИU+0418200
C9ЙU+0419201
CAКU+041A202
CBЛU+041B203
CCМU+041C204
CDНU+041D205
CEОU+041E206
CFПU+041F207
D0РU+0420208
D1СU+0421209
D2ТU+0422210
D3УU+0423211
D4ФU+0424212
D5ХU+0425213
D6ЦU+0426214
D7ЧU+0427215
D8ШU+0428216
D9ЩU+0429217
DAЪU+042A218
DBЫU+042B219
DCЬU+042C220
DDЭU+042D221
DEЮU+042E222
DFЯU+042F223
E0аU+0430224
E1бU+0431225
E2вU+0432226
E3гU+0433227
E4дU+0434228
E5еU+0435229
E6жU+0436230
E7зU+0437231
E8иU+0438232
E9йU+0439233
EAкU+043A234
EBлU+043B235
ECмU+043C236
EDнU+043D237
EEоU+043E238
EFпU+043F239
F0рU+0440240
F1сU+0441241
F2тU+0442242
F3уU+0443243
F4фU+0444244
F5хU+0445245
F6цU+0446246
F7чU+0447247
F8шU+0448248
F9щU+0449249
FAъU+044A250
FBыU+044B251
FCьU+044C252
FDэU+044D253
FEюU+044E254
FFяU+044F255
ByteWindows-1251UnicodeWindows-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 in one view: 127 defined bytes, one undefined hole (0x98), and a layout that splits its loyalty three ways - the 0xC0-0xFF block is the Russian alphabet in letter order, while 0x80-0xBF scatters the Ukrainian, Belarusian, Serbian, Macedonian and Bulgarian letters that never fit a single alphabet, alongside the typographic set the page shares with Windows-1252 (curly quotes, dashes, ellipsis, euro, trademark). The second chart isolates the 16 slots of 0x80-0x9F where the two ANSI siblings disagree: Windows-1252 spends them on Western typography, Windows-1251 spends them on South-Slavic letters - byte 0x80 is € in one and Ђ (Serbian Dje) in the other, which is why a single byte flip can turn a French quote into a Serbian letter. Wikipedia's market data: as of January 2024, 0.3% of all websites still use Windows-1251 - the second most-used single-byte encoding and the most used of the single-byte encodings supporting Cyrillic.
Two authorities govern this page. The mapping itself is Microsoft's published table (CP1251.TXT at the Unicode Consortium, table version 2.01) - the values above are generated from it and byte-verified; the governing web standard is the WHATWG Encoding Standard, which labels the encoding windows-1251 (alias cp1251). Regional variants Wikipedia tabulates: KZ-1048 (Kazakhstan STRK1048-2002) and an Amiga-1251 descendant. And vs ISO 8859-5, Wikipedia is blunt: Windows-1251 and KOI8-R are much more commonly used than ISO 8859-5, which is used by less than 0.0004% of websites. Escape routes on this site: the UTF-8 encoding table for the modern bytes, the Windows-1252 table for the Western sibling this one shares 0x20-0x7F with, the ISO 8859-1 table for the base they replaced, and the Cyrillic alphabet table for the letters themselves.

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

  1. 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.
  2. 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.
  3. 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.

Related tools