Short answer: Install the Polish (Programmers) layout and every Polish letter is AltGr + the matching English letter — AltGr + A for ą, AltGr + L for ł. Two exceptions: ź is AltGr + X and ż is AltGr + Z. Of the nine letters, only ó has a Windows Alt code (Alt + 0243); the rest sit above the legacy range.
Tap to copy
Switching between several languages? The Accent Keyboard holds the full set with per-language presets.
The nine letters
Polish adds nine letters to the Latin alphabet. Eight are a familiar letter with a mark; one isn’t.
| Letter | Name | Code point | AltGr | Alt code |
|---|---|---|---|---|
| ą | Latin small letter a with ogonek | U+0105 | AltGr + A | none |
| ć | Latin small letter c with acute | U+0107 | AltGr + C | none |
| ę | Latin small letter e with ogonek | U+0119 | AltGr + E | none |
| ł | Latin small letter l with stroke | U+0142 | AltGr + L | none |
| ń | Latin small letter n with acute | U+0144 | AltGr + N | none |
| ó | Latin small letter o with acute | U+00F3 | AltGr + O | Alt + 0243 |
| ś | Latin small letter s with acute | U+015B | AltGr + S | none |
| ź | Latin small letter z with acute | U+017A | AltGr + X | none |
| ż | Latin small letter z with dot above | U+017C | AltGr + Z | none |
Capitals work the same way with Shift held as well: Shift + AltGr + A gives Ą.
Only ó has an Alt code, and there’s a reason. The old Windows Alt codes reach characters in the Windows-1252 code page, which was built for Western European languages. ó happens to live there because French, Spanish and Italian need it. The other eight are in Windows-1250, the Central European page, which the Alt code system never covered. So any guide offering you Alt codes for all nine is inventing eight of them. For those, use hex plus Alt + X in Word, or copy. Alt codes vs Unicode vs HTML explains the boundary.
Windows: the Programmers layout
This is the one almost everyone uses, and it’s the default Windows offers for Polish.
- Settings → Time & Language → Language & region → Polish → Options → Add a keyboard → Polish (Programmers).
- Switch with Windows key + Space.
- Hold the right Alt key — that’s AltGr — and press the matching letter.
The layout is otherwise identical to US QWERTY, which is the whole point: nothing you already type moves. You add nine combinations and keep everything else.

Remember the two odd ones. ź is on X and ż is on Z, because both are z-letters and only one can have the Z key. The mnemonic that helps: Z for the dot, X for the acute.
There’s also a Polish (214) layout — the traditional typewriter arrangement, QWERTZ-based with the Polish letters on dedicated keys. It exists for people who learned on Polish typewriters, and it will feel wrong if you didn’t. Choose Programmers.
If you only need a word or two occasionally, a text replacement shortcut per letter avoids installing anything — see text replacement for symbols.
Mac
Add it under System Settings → Keyboard → Input Sources → + → Polish, where macOS offers Polish – Pro. The Option key does the job AltGr does on Windows, following the same letter mnemonics.
If a combination doesn’t produce what you expect, open Input menu → Show Keyboard Viewer and hold Option: the viewer displays the whole Option layer live, so you can see exactly which key carries which letter rather than guessing. That’s worth doing once for ź and ż specifically.
Without a Polish input source, there’s no standard Option shortcut for these letters on a US layout — use press-and-hold, the Character Viewer (Control + Command + Space), or copy from above. The US-layout accent shortcuts that do exist are covered in accents on a US keyboard.
iPhone and Android
The easiest route of all, and no setup needed for most of it.
Press and hold the base letter and the Polish variants appear: hold a for ą, c for ć, e for ę, n for ń, o for ó, s for ś, z for both ź and ż, and l for ł.
For anything more than occasional use, add the keyboard properly — Settings → General → Keyboard → Keyboards → Add New Keyboard → Polish on iPhone, or Settings → Languages → Add keyboard → Polish in Gboard. You get Polish autocorrect and predictive text, which matters more than the letters themselves once you’re writing sentences.
Linux
Add the Polish layout in your desktop’s keyboard settings — it behaves like the Windows Programmers layout, with AltGr carrying the nine letters. Or enter code points directly: Ctrl + Shift + U, then 0142, then Enter or Space for ł. See typing symbols on Linux.
ż is not ź
The two z-letters are the most common Polish typo among non-native writers, and they’re genuinely different letters with different sounds:
- ż U+017C — z with a dot above.
- ź U+017A — z with an acute accent.
At small sizes the dot and the acute are hard to tell apart, which is exactly why they get swapped. The consequence is ordinary: może (maybe) and morze (sea) are already a classic pair for learners, and adding a wrong mark on top makes search, spell-check and sorting fail on words that look correct.
If you’re unsure which one is in a document, paste it into the Symbol Identifier — it reports the code point, which is the only reliable way to tell.
ł is not an accented l
This one matters more than it looks, and it’s easy to verify.
Eight of the nine Polish letters are a base letter plus a mark, and Unicode can split them apart: ą decomposes to a + a combining ogonek, ś to s + a combining acute. ł doesn’t decompose at all. It’s a single indivisible character — a letter with a stroke through it, not an l wearing an accent. Same for capital Ł.
Two practical consequences:
- Accent-stripping code won’t touch it. The standard trick — decompose, then remove combining marks — turns
ąintoaandśintos, but leavesłexactly as it was. If you’re generating URL slugs or ASCII filenames from Polish text, ł needs an explicit rule mapping it tol, or it survives into output that was supposed to be ASCII-only. - It’s not a styling variant.
landłare as different aslandk. Substituting one for the other changes the word.
The same reasoning underlies the ogonek: ą is not a with a cedilla, even though the hook looks similar. The ogonek opens to the right and the cedilla hangs below — different marks, different characters, as covered for ç in ñ and ç.
On the web and in code
html
<p lang="pl">Zażółć gęślą jaźń</p>
That sentence is the Polish equivalent of a pangram for diacritics — it contains almost every special letter, which makes it the fastest way to test whether a font, a form field or a database column handles Polish properly. If any character comes out wrong, you’ll see it immediately.
Numeric references work everywhere: ą (ą), ć (ć), ę (ę), ł (ł), ń (ń), ó (ó), ś (ś), ź (ź), ż (ż).
Set lang="pl" on the element. It drives spell-checking, hyphenation and screen-reader pronunciation, and it’s what makes a browser sort and search Polish text with Polish rules rather than English ones.
Use UTF-8 everywhere. Polish text arriving as ¹æê or a row of question marks is an encoding mismatch, not a font problem — almost always Windows-1250 or ISO 8859-2 data being read as something else. Polish has a long history with those legacy pages, so old exports and database dumps hit this constantly. If characters show as empty boxes instead, that’s the different problem covered in symbols showing as boxes.
Accessibility
Screen readers announce these by Unicode name when they don’t know the language — ł becomes “latin small letter l with stroke” — which makes Polish text read as a stream of character descriptions rather than words.
lang="pl" fixes it by switching a multilingual reader to Polish pronunciation. This matters more for Polish than for languages whose special letters are rare, because nine letters appear throughout ordinary text rather than occasionally. How screen readers pronounce symbols covers the pattern.
Troubleshooting
| Problem | Fix |
|---|---|
| AltGr + Z gives ż but I wanted ź | ź is on X. Z for the dot, X for the acute. |
| AltGr does nothing | Left Alt isn’t AltGr — use the right Alt key, and check the Polish (Programmers) layout is active. |
| Alt code doesn’t work for ą, ć, ę, ł, ń, ś, ź or ż | There isn’t one — they’re outside the Windows-1252 range. Only ó has one (Alt + 0243). |
Text shows as ¹æê or question marks | Encoding mismatch — Windows-1250 or ISO 8859-2 data read as something else. Convert to UTF-8. |
| Accent-stripping left ł untouched | Expected. ł doesn’t decompose; add an explicit ł → l rule. |
| Laptop has no right Alt key | Use press-and-hold on a phone, copy from above, or set text replacements. |
| Letters look right but search fails | Possibly ż vs ź. Check the code point with the Symbol Identifier. |
Recap
| Situation | Do this |
|---|---|
| Typing Polish regularly | Polish (Programmers) + AltGr |
| ź and ż specifically | AltGr + X and AltGr + Z |
| Occasional ó on Windows | Alt + 0243 |
| The other eight, occasionally | Copy above, or hex + Alt + X in Word |
| On a phone | Press and hold the base letter |
| Writing HTML | Numeric references plus lang="pl" |
| Generating slugs from Polish | Decompose and strip marks, plus an explicit ł rule |
Frequently asked questions
How do I type Polish letters on a US keyboard?
Add the Polish (Programmers) layout, then hold the right Alt key and press the matching letter — AltGr + A for ą, AltGr + L for ł. The layout is otherwise identical to US QWERTY, so nothing else moves.
Why is ź on the X key?
Because Polish has two z-letters and only one Z key. ż with the dot stays on Z, and ź with the acute moves to X. A useful mnemonic is “Z for the dot, X for the acute”.
Do Polish letters have Windows Alt codes?
Only ó, at Alt + 0243. The legacy Alt codes reach the Windows-1252 code page, and the other eight Polish letters live in Windows-1250 instead. Guides listing Alt codes for all nine have invented eight of them.
What’s the difference between ż and ź?
ż has a dot above; ź has an acute accent. They’re separate letters with different sounds, and at small sizes they’re easy to confuse — which is why swapped ones break search and spell-check on words that look right.
Is ł just an l with a line through it?
It’s a separate letter, not a styled l. Unlike the other eight, it doesn’t decompose into a base letter plus a mark, so accent-stripping code leaves it untouched and needs an explicit rule to turn it into l.
Why does my Polish text show as strange symbols?
Almost always an encoding mismatch — Windows-1250 or ISO 8859-2 text being read as another encoding. Convert the data to UTF-8. Empty boxes instead of wrong characters are a font problem rather than an encoding one.
Written by Igor R. Tested on Windows 11, macOS, iOS, Android, Linux and Word. Last updated September 2026. Symbol code points follow the Unicode Standard.