Skip to content
Hex Calculator

Hex to UTF-16 Converter

Decode hex bytes as UTF-16 text (big-endian, 2 bytes per code unit) — the internal string format JavaScript, Java, and Windows all use.

UTF-16 text result
H

How Hex to UTF-16 Decoding Works

Group the hex bytes into pairs (2 bytes = 16 bits = 1 code unit), read each pair as a big-endian number, and treat it as either a standalone character (for most text) or half of a surrogate pair (for characters above U+FFFF, like most emoji).

Hex to UTF-16 Example, Step by Step

D83DDE00 = 😀

D83DDE00 (hex) = 😀 (UTF-16 surrogate pair)

D83D = high surrogate (in range D800-DBFF)
DE00 = low surrogate (in range DC00-DFFF)
Together they decode to U+1F600
StepDescriptionResult
Read first code unitD83D falls in the high-surrogate rangehigh surrogate
Read second code unitDE00 falls in the low-surrogate rangelow surrogate
Combine the pairhigh + low surrogate decode to U+1F600😀

Plain characters below U+FFFF need only one code unit — surrogate pairs only come up for the less common characters above that range.

Common Mistakes When Decoding Hex to UTF-16

  • Grouping bytes in the wrong pairs, which misaligns every code unit after the first.
  • Treating a lone surrogate half as a standalone character instead of pairing it.
  • Mixing up big-endian and little-endian byte order, which produces garbled output.

Frequently Asked Questions

How is UTF-16 different from UTF-8?

UTF-16 uses 2 bytes per code unit as its baseline (versus UTF-8's 1-byte baseline), and represents characters above U+FFFF using a pair of 2-byte surrogate code units instead of a single longer unit.

Is this big-endian or little-endian UTF-16?

Big-endian (UTF-16BE) — the more common convention for displaying UTF-16 as hex. Windows internally often uses little-endian (UTF-16LE); swap each byte pair if you're working with that instead.

What's a surrogate pair?

Two 16-bit code units (4 bytes total) that together represent one character above U+FFFF, like most emoji. Neither unit is a valid character on its own — they only mean something as a pair.

Why does plain English text take twice as many bytes as UTF-8?

Because UTF-16's minimum unit is 2 bytes even for characters UTF-8 would fit in 1 — 'A' is 0x41 in UTF-8 but 0x0041 in UTF-16.

Where is UTF-16 actually used?

It's the native internal string representation in JavaScript, Java, and Windows (UTF-16LE specifically) — this converter is useful for reading raw string data from those environments.

What happens with an odd number of hex digits?

The calculator flags it — UTF-16 needs exactly 2 bytes per code unit, so an odd byte count means a digit is missing somewhere.