The RFC 3986 reserved set
RFC 3986 defines two character classes. Reserved (: / ? # [ ] @ ! $ & ' ( ) * + , ; =) have special meaning in URL syntax — they delimit components. Unreserved (A-Z a-z 0-9 -_.~) never need encoding. Everything else (spaces, accented letters, emoji, control characters) must be percent-encoded as its UTF-8 bytes.