Base64, URL and HTML encoder and decoder

Encode or decode Base64, URL-safe Base64, URL percent-encoding, HTML entities, hex bytes and Unicode code points, with UTF-8 and UTF-16 byte counts.

آخر تحديث أمثلة تم التحقق منها: 17

جرّب
النتيجة
Q2Fmw6kgJiBjcsOobWUsIDUg4oKs
النتيجة: Q2Fmw6kgJiBjcsOobWUsIDUg4oKs
Characters (code points)
17
UTF-8 bytes
21
UTF-16 code units
17
Result length
28characters

17 characters become 21 UTF-8 bytes; as Base64 they take 28 characters, 1.33 per byte.

المقاسات

Characters17UTF-8 bytes21UTF-16 bytes34Base64 output28

UTF-8 bits of the first characters

“C” U+0043 → 43
0
1
0
0
0
0
1
1
“a” U+0061 → 61
0
1
1
0
0
0
0
1
“f” U+0066 → 66
0
1
1
0
0
1
1
0
“é” U+00E9 → c3 a9
1
1
0
0
0
0
1
1
1
0
1
0
1
0
0
1
طريقة الحساب S
  1. Encode the text as UTF-8

    17 characters → 21 bytes.

  2. Regroup 8-bit bytes into 6-bit indices

    First group: 43 61 66 → 010000 110110 000101 100110 → 16, 54, 5, 38 → “Q2Fm”.

  3. Output length

    4⌈213⌉=284 \left\lceil \frac{21}{3} \right\rceil = 28

حول Base64, URL and HTML encoder and decoder

Every scheme here starts from the text's UTF-8 bytes. Base64 regroups each 3 bytes into four 6-bit values drawn from a 64-character alphabet (RFC 4648), so the output is 4 × ⌈n ÷ 3⌉ characters. Percent-encoding writes every byte outside A–Z, a–z, 0–9 and - . _ ~ as %XX (RFC 3986), HTML escaping replaces & < > " and ' with character references, and hex writes two digits per byte.

Developers use it to put binary data in JSON or email, build query strings, read JWTs and track down character-set problems. The default, "Café & crème, 5 €", is 17 characters but 21 UTF-8 bytes, because é and è take 2 bytes each and € takes 3, and its Base64 form is 28 characters.

A decoding error names the bad character and its position, and bytes that aren't valid UTF-8 show as U+FFFD (�).

أمثلة محلولة

Base64 of “foob” (two padding characters)

Encoding
Base64
Direction
Encode
النص
foob
النتيجة
Zm9vYg==
UTF-8 bytes
4
Result length
8 characters

مصدر التحقق: ⁨RFC 4648 §10 test vectors; Python 3.8 base64.b64encode(b'foob') and len() of input and output⁩

Base64 of an empty string

Encoding
Base64
Direction
Encode
النتيجة
UTF-8 bytes
0
Result length
0 characters

مصدر التحقق: ⁨RFC 4648 §10: BASE64("") = ""⁩

URL-safe Base64 without padding

Encoding
Base64 (URL-safe)
Direction
Encode
النص
<<???>>
النتيجة
PDw_Pz8-Pg
Result length
10 characters

مصدر التحقق: ⁨Python 3.8 base64.urlsafe_b64encode(b'<<???>>').rstrip(b'=') (10 characters); the standard alphabet gives PDw/Pz8+Pg==⁩

Decode Base64 to Chinese text

Encoding
Base64
Direction
Decode
Encoded text
5L2g5aW9IOS4lueVjA==
النتيجة
你好 世界
Characters (code points)
5
UTF-8 bytes
13
UTF-16 code units
5

مصدر التحقق: ⁨Python 3.8 base64.b64decode('5L2g5aW9IOS4lueVjA==').decode('utf-8'); len() of the text, its UTF-8 bytes and its UTF-16-LE bytes ÷ 2⁩

الأسئلة

Why does Base64 make data about 33% larger?

Base64 carries 6 bits in each output character against 8 bits in each input byte, so every 3 bytes become 4 characters, a ratio of 4 to 3, plus up to 2 = padding characters at the end. 21 bytes become 28 characters, and 1 MB of binary becomes about 1.33 MB. MIME email (RFC 2045) also breaks the output into lines of at most 76 characters, which adds a little more.

What is the difference between Base64 and Base64URL?

Base64URL (RFC 4648 §5) replaces the two characters that clash with URLs and file names, + and /, with - and _, and usually drops the = padding. JSON Web Tokens (RFC 7519) use it for all three of their parts. The text <<???>> is PDw/Pz8+Pg== in standard Base64 and PDw_Pz8-Pg in the URL-safe form, 10 characters instead of 12.

Is Base64 a form of encryption?

No. Base64 is a reversible encoding with no key, so anyone can decode it in one step; it only makes binary data safe to carry as text. HTTP Basic authentication (RFC 7617), for example, sends user:password in Base64, which is why it is only safe over HTTPS. To protect data, encrypt it first, for example with AES-256, and then Base64-encode the ciphertext if it must travel as text.

Should a space be URL-encoded as %20 or +?

Both appear, in different places. RFC 3986, which governs URLs, encodes a space as %20, while HTML form submissions (application/x-www-form-urlencoded) write it as +. So a+b in a form's query string means a b, but in a URL path the + is a literal plus. JavaScript's encodeURIComponent gives %20, and Python's urllib.parse.quote_plus gives +.

How many bytes does a character take in UTF-8?

One to four. Code points below U+0080 (ASCII) take 1 byte, those up to U+07FF take 2 (é, ñ, Greek, Cyrillic), those up to U+FFFF take 3 (€ and most Chinese characters) and the rest take 4, including emoji such as 😀 (U+1F600). So A€😀 is 3 characters, 8 UTF-8 bytes and 4 UTF-16 code units, because 😀 needs a surrogate pair in UTF-16 (RFC 3629).

ما مدى دقة «⁨Base64, URL and HTML encoder and decoder⁩»؟

تعتمد الدقة على مدخلاتك وافتراضات الطريقة. يستخدم الحساب العشري 50 رقمًا معنويًا، لكن التقديرات والأساليب العددية وبيانات المصدر قد تكون أقل دقة؛ تقريب القيم المعروضة لا يزيل هذه الحدود. أمثلة محلولة جرى التحقق منها بمصادر مستقلة: 17. مثلًا، يجري التحقق من «⁨Base64 of “foob” (two padding characters)⁩» بالرجوع إلى ⁨RFC 4648 §10 test vectors; Python 3.8 base64.b64encode(b'foob') and len() of input and output⁩.

ما مصدر هذه الطريقة؟

RFC 4648 — The Base16, Base32, and Base64 Data Encodings; RFC 3986 §2 — URI characters and percent-encoding; RFC 3629 — UTF-8, a transformation format of ISO 10646; WHATWG HTML — Named character references; The Unicode Standard, §3.9 Unicode encoding forms.

حول هذه الحاسبة

Base64 length=4⌈n3⌉hex length=2nn=UTF-8 bytes\begin{aligned} \text{Base64 length} &= 4\left\lceil \frac{n}{3} \right\rceil \\ \text{hex length} &= 2n \\ n &= \text{UTF-8 bytes} \end{aligned}

المصادر

  1. RFC 4648 — The Base16, Base32, and Base64 Data Encodings
  2. RFC 3986 §2 — URI characters and percent-encoding
  3. RFC 3629 — UTF-8, a transformation format of ISO 10646
  4. WHATWG HTML — Named character references
  5. The Unicode Standard, §3.9 Unicode encoding forms

تم التحقق بالرجوع إلى المصادر

تتضمن هذه الحاسبة أمثلة محلولة بإجابات من مصادر مستقلة، وعددها 17. تُشغّل ضمن مجموعة الاختبارات، ويمكنك تشغيلها هنا أيضًا.

حاسبات ذات صلة