%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"é"
NameE With Acute Accent
Encoded%C3%A9
ReservedNo

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

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.