Base64 and European character sets

Published

Base64 encodes bytes, not letters. The same European word produces different Base64 depending on whether those bytes are UTF-8, ISO-8859-1, Windows-1252 or ISO-8859-2. This is the #1 reason developers in France, Germany, Spain, Poland and Nordics see garbled text after “successful” decoding.

Quick map for Europe

Situation Likely charset
Modern APIs, browsers, JSON, UTF-8 databases UTF-8
Old Windows apps, Word/Excel exports, Western Europe Windows-1252
Strict Latin-1 / ISO environments ISO-8859-1
Euro sign in legacy Western Europe ISO-8859-15 or Windows-1252
Polish, Czech, Slovak, Hungarian legacy data ISO-8859-2
Russian / Bulgarian legacy mail Windows-1251 or KOI8-R

Classic mojibake: é instead of é

That pattern means UTF-8 bytes were shown as Latin-1/Windows-1252. Decode the Base64 as UTF-8, or paste it into the character encoding detector to rank charsets automatically.

Developer workflow

  1. Prefer UTF-8 for new systems (Europe and worldwide).
  2. When decoding unknown legacy Base64, leave charset on auto-detect on the Base64 decoder.
  3. If you know the source OS (old Windows ERP, bank file, SAP export), force Windows-1252 or ISO-8859-2 explicitly on Base64 to text.
  4. When encoding for a legacy peer, set the matching charset on text to Base64 so they receive the bytes they expect.

Comments (0)

Questions, ideas or a bug in “Base64 and European character sets”? Leave a comment, rate the tool, or reply to others.

No comments yet. Be the first to share your feedback!

Leave a comment

Rate this tool:
Esc
↑ ↓ move↵ openEsc close