W3docs

ISO-8859-1

ISO-8859-1 (Latin-1) is a legacy single-byte character encoding. Learn how it maps 256 code points, why browsers treat it as Windows-1252, and its entities.

ISO-8859-1 (named after the International Organization for Standardization, and also known as Latin-1) is a legacy single-byte character encoding. This page explains what it is, where you still encounter it, the surprising way browsers actually handle it, and the full character/entity reference.

Note that ISO-8859-1 is not the default in modern browsers. Since HTML5, the default character set is UTF-8, which is the encoding you should use for every new document. ISO-8859-1 matters today mainly when you read or maintain older pages.

What ISO-8859-1 Is

ISO-8859-1 is a single-byte encoding: every character is stored in exactly one byte, so it can represent a maximum of 256 code points, numbered 0 to 255. Those 256 slots split into two halves:

  • 0–127 — identical to ASCII. The basic Latin letters A–Z and a–z, the digits 0–9, punctuation, the space, and control characters all live here.
  • 128–255 — the Latin-1 supplement: accented letters (à, é, ñ, ü), and symbols such as ©, £, ¥, ½, and ÷. These cover most Western European languages.

Because it is single-byte, ISO-8859-1 cannot represent characters outside this set — there is no way to encode, for example, the euro sign €, Greek, Cyrillic, or any CJK script. That limitation is exactly why the multi-byte UTF-8 replaced it. For the bigger picture of how encodings relate, see HTML Character Sets.

Historical context

In the 1990s and early 2000s, ISO-8859-1 was the default fallback encoding for HTTP and HTML on the Western web, so a great many older pages were authored with it. You still encounter it today in legacy HTML files, databases, email headers, and HTTP responses that have not been migrated to UTF-8. Recognizing it helps you debug the classic "mojibake" problem, where accented characters render as garbled symbols because a file's actual bytes and its declared encoding disagree.

The Windows-1252 Gotcha

Here is the most common source of confusion. Per the WHATWG Encoding Standard, when a browser sees a document declared as charset=ISO-8859-1, it does not decode it as true ISO-8859-1. Instead it decodes it as Windows-1252.

The difference lies in the 128–159 range. In genuine ISO-8859-1 those positions are unused C1 control characters. Windows-1252 reuses that range for printable characters such as the euro sign (€), curly quotes (“ ”, ‘ ’), the em dash (—), and the trademark sign (™). Because real-world content so often expected those Windows characters, the standard mandates that ISO-8859-1 (and its aliases latin1, iso8859-1, etc.) be treated as Windows-1252 for HTML decoding.

The practical takeaway: a <meta charset="ISO-8859-1"> declaration and a <meta charset="windows-1252"> declaration behave identically in browsers. When you are unsure which legacy encoding a page uses, this is usually why the characters in the 128–159 range still appear correctly.

Declaring the Character Encoding

Use <meta charset="UTF-8"> to declare the encoding of your HTML document, and place it inside the <head> section:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
</head>
<body>
  <!-- Your content here -->
</body>
</html>

The placement matters. The HTML standard requires the <meta charset> declaration to appear within the first 1024 bytes of the document. The browser starts reading bytes before it knows the encoding, so the declaration has to come early enough for the browser to find it and re-interpret the rest of the page correctly. In the example above, <meta charset="UTF-8"> is the very first thing inside <head>, comfortably inside that window. To declare a legacy encoding instead, you would write <meta charset="ISO-8859-1"> (which, as noted above, the browser treats as Windows-1252).

Reserved Characters in HTML

Some characters are reserved in HTML because they are used to make up the HTML language. For example, you cannot use the greater-than or less-than signs in your text, as the browser will try to interpret them as HTML. Use the entity name or entity number when you want to output any of the reserved characters.

See the list of the reserved characters in the table below:

CharacterEntity NumberEntity NameDescription
"&#34;&quot;quotation mark
'&#39;&apos;apostrophe
&&#38;&amp;ampersand
<&#60;&lt;less-than
>&#62;&gt;greater-than

For the complete reference of named character references, see HTML Entities.

ISO 8859-1 Symbols

CharacterEntity NumberEntity NameDescription
 non-breaking space
¡¡¡inverted exclamation mark
¢¢¢cent
£££pound
¤¤¤currency
¥¥¥yen
¦¦¦broken vertical bar
§§§section
¨¨¨spacing diaeresis
©©©copyright
ªªªfeminine ordinal indicator
«««angle quotation mark (left)
¬¬¬negation
­­­soft hyphen
®®®registered trademark
¯¯¯spacing macron
°°°degree
±±±plus-or-minus
²²²superscript 2
³³³superscript 3
´´´spacing acute
µµµmicro
paragraph
···middle dot
¸¸¸spacing cedilla
¹¹¹superscript 1
ºººmasculine ordinal indicator
»»»angle quotation mark (right)
¼¼¼fraction 1/4
½½½fraction 1/2
¾¾¾fraction 3/4
¿¿¿inverted question mark
×××multiplication
÷÷÷division

ISO 8859-1 Characters

CharacterEntity NumberEntity NameDescription
ÀÀÀcapital a, grave accent
ÁÁÁcapital a, acute accent
ÂÂÂcapital a, circumflex accent
ÃÃÃcapital a, tilde
ÄÄÄcapital a, umlaut mark
ÅÅÅcapital a, ring
ÆÆÆcapital ae
ÇÇÇcapital c, cedilla
ÈÈÈcapital e, grave accent
ÉÉÉcapital e, acute accent
ÊÊÊcapital e, circumflex accent
ËËËcapital e, umlaut mark
ÌÌÌcapital i, grave accent
ÍÍÍcapital i, acute accent
ÎÎÎcapital i, circumflex accent
ÏÏÏcapital i, umlaut mark
ÐÐÐcapital eth, Icelandic
ÑÑÑcapital n, tilde
ÒÒÒcapital o, grave accent
ÓÓÓcapital o, acute accent
ÔÔÔcapital o, circumflex accent
ÕÕÕcapital o, tilde
ÖÖÖcapital o, umlaut mark
ØØØcapital o, slash
ÙÙÙcapital u, grave accent
ÚÚÚcapital u, acute accent
ÛÛÛcapital u, circumflex accent
ÜÜÜcapital u, umlaut mark
ÝÝÝcapital y, acute accent
ÞÞÞcapital THORN, Icelandic
ßßßsmall sharp s, German
àààsmall a, grave accent
ááásmall a, acute accent
âââsmall a, circumflex accent
ãããsmall a, tilde
äääsmall a, umlaut mark
åååsmall a, ring
æææsmall ae
çççsmall c, cedilla
èèèsmall e, grave accent
ééésmall e, acute accent
êêêsmall e, circumflex accent
ëëësmall e, umlaut mark
ìììsmall i, grave accent
ííísmall i, acute accent
îîîsmall i, circumflex accent
ïïïsmall i, umlaut mark
ðððsmall eth, Icelandic
ñññsmall n, tilde
òòòsmall o, grave accent
óóósmall o, acute accent
ôôôsmall o, circumflex accent
õõõsmall o, tilde
ööösmall o, umlaut mark
øøøsmall o, slash
ùùùsmall u, grave accent
úúúsmall u, acute accent
ûûûsmall u, circumflex accent
üüüsmall u, umlaut mark
ýýýsmall y, acute accent
þþþsmall thorn, Icelandic
ÿÿÿsmall y, umlaut mark

Variants of ISO-8859-1

ISO-8859-1 is only the first part of the larger ISO 8859 family. Each part keeps the ASCII lower half (0–127) but swaps the upper half (128–255) to cover a different group of languages or scripts. The most common parts are listed below.

Character setDescriptionCovers
ISO-8859-1Latin 1North America, Western Europe, Latin America, the Caribbean, Canada, Africa.
ISO-8859-2Latin 2Eastern Europe.
ISO-8859-3Latin 3SE Europe, Esperanto, miscellaneous others.
ISO-8859-4Latin 4Scandinavia/Baltics (and others not in ISO-8859-1).
ISO-8859-5Latin/CyrillicThe languages that use a Cyrillic alphabet such as Bulgarian, Belarusian, Russian and Macedonian.
ISO-8859-6Latin/ArabicThe languages that use the Arabic alphabet.
ISO-8859-7Latin/GreekThe modern Greek language as well as mathematical symbols derived from the Greek.
ISO-8859-8Latin/HebrewThe languages that use the Hebrew alphabet.
ISO-8859-9Latin/TurkishThe Turkish language. Same as ISO-8859-1 except Turkish characters replace Icelandic ones.
ISO-8859-10Latin/NordicThe Nordic languages.
ISO-8859-15Latin 9 (Latin 0)Similar to ISO-8859-1 but replaces some less common symbols with the euro sign and some other missing characters.

Modern browsers automatically detect or fall back to UTF-8 when no encoding is specified. Legacy encodings like ISO-8859-1 are primarily supported for backward compatibility with older web pages. For new projects, always use UTF-8 to ensure full Unicode support and cross-platform consistency.

See also HTML Character Sets, HTML ASCII, and HTML Entities.

Practice

Practice
What best describes the ISO-8859-1 encoding?
What best describes the ISO-8859-1 encoding?
Was this page helpful?