%C3%A9 is the letter é
%C3%A9 is the letter é (e with an acute accent, U+00E9), written as two escapes because it takes two bytes in UTF-8.
| Character | "é" |
|---|---|
| Name | E With Acute Accent |
| Encoded | %C3%A9 |
| Reserved | No |
Why it breaks things
é looks like one character, U+00E9 LATIN SMALL LETTER E WITH ACUTE, but a URL does not encode characters — it encodes bytes. In UTF-8, verified in Python: "é".encode("utf-8") gives the two bytes C3 A9. Percent-encoding escapes each byte on its own, so one letter becomes two %XX pairs.
This trips up anyone assuming one character in means one escape out. A plain ASCII letter is one byte and becomes one escape at most; an accented letter, in UTF-8, commonly takes two — a name like café or Núñez gains extra characters the moment it is percent-encoded, purely from how many bytes its accents take up.
The real trap is decoding those bytes with the wrong assumption. Reading C3 A9 as Latin-1 instead of UTF-8 gives é, not é — verified in Python: b'\xc3\xa9'.decode("latin-1") produces "é". café turning into café is the classic sign of a UTF-8 value read as Latin-1.
Real examples
Without encoding
https://example.com/menu?item=café
With encoding
https://example.com/menu?item=caf%C3%A9
encodeURIComponent, or any UTF-8-aware encoder, turns é into the two bytes %C3%A9 — one letter, two escapes, because percent-encoding works on bytes, not characters. The raw form is not invalid, but many older tools handle only ASCII reliably, so the encoded form travels more safely.
Without encoding
https://example.com/staff/José
With encoding
https://example.com/staff/Jos%C3%A9
Same two-byte escape for the é in José. The risk is on the decoding side: if a server or legacy system reads these bytes as Latin-1 instead of UTF-8, José comes back mangled as José — verified, C3 A9 decoded as Latin-1 gives exactly é.
Decode something
Result
Breakdown
| Part | Value | Copy |
|---|
History
Nothing yet.
History stays in this browser. It is never sent to our server.
Common questions
- Why does one accented letter turn into two %XX codes?
- Because percent-encoding escapes UTF-8 bytes, not characters, and é takes two bytes in UTF-8: C3 and A9. Each byte gets its own %XX escape.
- What is é and why do I see it instead of é?
- It is mojibake: the two UTF-8 bytes for é, C3 A9, read back as Latin-1 instead of UTF-8. Each byte is reinterpreted as its own separate Latin-1 character, producing à followed by ©.
- Is %C3%A9 always é?
- Only if it is decoded as UTF-8. The same two bytes decoded under a different encoding, like Latin-1, produce a different, wrong result: é.
- Do all non-English letters take two bytes in UTF-8?
- No. Accented Latin letters like é or ñ commonly take two bytes. Many other scripts take more — common CJK characters take three bytes, and most emoji take four.