ISO-8859-1 / Latin-1 Encoder

Encode text to an ISO-8859-1 byte sequence shown as hex

Convert text encodable in ISO-8859-1 (Latin-1) to its single-byte hex representation and decode Latin-1 hex back to text. Latin-1 maps Unicode U+0000 to U+00FF directly onto bytes, covering Western European accented letters. Runs in your browser. It runs free in your browser on Gera Tools, with nothing uploaded.

Last updated Source: Gera Tools

What is ISO-8859-1?

ISO-8859-1, also called Latin-1, is an 8-bit encoding for Western European languages. It is the simplest legacy encoding because each byte value from 0x00 to 0xFF maps directly to the Unicode codepoint of the same number.

ISO-8859-1, better known as Latin-1, is the most literal of the legacy encodings: every byte is simply the Unicode codepoint of the same value. This tool encodes text to Latin-1 hex and decodes it back.

Why Latin-1 is uniquely simple

Most character encodings require a lookup table because there is no arithmetic relationship between a character and its byte. Latin-1 is different. When Unicode was designed in the early 1990s, its creators deliberately aligned the first 256 code points with ISO-8859-1 so that existing Latin-1 text would be valid Unicode without any conversion. The result is that Latin-1 encoding and decoding is a pure identity map — no lookup, no arithmetic beyond reading the codepoint value:

encode : codepoint  →  byte   (only valid for U+0000 to U+00FF)
decode : byte       →  codepoint of the same value

Any character above U+00FF has no Latin-1 byte and is reported as skipped.

What Latin-1 covers and what it misses

Latin-1 spans two ranges:

  • U+0000–U+007F — standard ASCII: letters, digits, punctuation, control codes.
  • U+0080–U+00FF — Western European characters: accented letters like é (0xE9), ñ (0xF1), ü (0xFC), ø (0xF8), ç (0xE7), and currency symbols like ¥ (0xA5) and £ (0xA3).

Characters that do not fit in Latin-1 (and are skipped by the encoder):

  • — Euro sign (U+20AC, above 0xFF)
  • — em dash (U+2014)
  • " " — curly quotes (U+201C, U+201D)
  • Any emoji, CJK character, or other non-Latin script

If your text contains these, you need UTF-8, which can encode all of Unicode, or Windows-1252 if you specifically need a single-byte encoding that includes the Euro sign.

Common real-world scenarios

Debugging legacy database output. Older databases configured with CHARSET=latin1 (a common MySQL default) store Western European text correctly, but output that gets misread as UTF-8 produces mojibake — for example, é appearing as é. Paste the raw bytes here to see what the Latin-1 values actually are.

HTTP and email headers. HTTP/1.1 specifies ISO-8859-1 as the default charset for text media types when no encoding is declared. Seeing garbled characters in an old web response or email is often a Latin-1 vs UTF-8 mismatch.

C and embedded systems. Legacy C code frequently uses unsigned char arrays where each byte is a Latin-1 character. Encoding a string to Latin-1 hex lets you inspect or initialise those arrays directly.

Latin-1 vs Windows-1252

They are almost identical: bytes 0x000x7F and 0xA00xFF are the same in both. The difference is the range 0x800x9F:

RangeLatin-1Windows-1252
0x80–0x9FReserved control codesPrintable symbols (€, —, ”, ” etc.)

Web browsers historically treated any page declared as iso-8859-1 as if it were Windows-1252, since almost nobody actually meant the control-code range. This created long-running confusion. If you see a Euro sign or curly quotes in your source, the encoding is almost certainly Windows-1252, not true Latin-1.