Encoding problems are usually byte problems in disguise. A Base64 string that decodes to garbage, a URL that breaks at an ampersand, a page that shows &, a quote that ends a string early: each comes from text written in one format and read in another.
The Base64 tool encodes text as UTF-8 and decodes either alphabet, standard or URL-safe, padded or not, and shows the bytes as hex when they aren’t text. The URL encoder escapes a value the way encodeURIComponent does and a whole URL the way encodeURI does, and takes a URL apart into its decoded pieces. HTML entities and string escaping for JSON, JavaScript, Python, SQL, the shell and four more cover the other layers. The text-to-binary viewer and the ASCII table go down to the code points and bytes themselves, and the QR code generator turns a link, Wi-Fi details or a phone number into a code a camera can read.
Most bugs here come from encoding twice, or decoding once too few: %20 becomes %2520, and & becomes &. The other is assuming one byte per character. In UTF-8, é takes two bytes and most emoji take four, which is why the browser’s btoa mis-encodes é and throws on an emoji, and why a string’s length in characters, in UTF-16 units and in bytes can be three different numbers.
Everything runs in your browser, so a token or a query string you paste stays on your machine.