Guides 02

How bytes are counted: UTF-8, EUC-KR and CP949

Why a Korean character is sometimes 2 bytes and sometimes 3. How to count bytes in each character encoding, and what to watch for in text messages and databases.

Characters and bytes are not the same

The character count is the number of characters a person sees; the byte count is how much space the text takes up when a computer stores it. The same character can take a different number of bytes depending on the character encoding (the rule that turns characters into numbers). English letters and digits are 1 byte in almost every encoding, but a Korean character can be 2 bytes or 3 bytes depending on the encoding.

UTF-8: today's standard

UTF-8 is the encoding used by web pages and most modern software. It uses 1 to 4 bytes depending on the size of the Unicode number (code point) (RFC 3629).

Code point rangeBytesExamples
U+0000 – U+007F1English letters, digits, basic symbols
U+0080 – U+07FF2é, ñ, Greek, Cyrillic and Arabic letters
U+0800 – U+FFFF3Hangul, Chinese characters, kana
U+10000 – U+10FFFF4Most emoji, historic scripts

All precomposed Hangul syllables (가 to 힣, U+AC00 to U+D7A3) fall in the third range, so in UTF-8 each Korean character is 3 bytes. For example, ‘안녕하세요’ (hello) is 5 characters and 15 bytes.

UTF-16

UTF-16, used internally by JavaScript, Java and Windows, stores most characters in 2 bytes and characters at U+10000 and above, such as emoji, in 4 bytes (a surrogate pair). This is why JavaScript's string length counts an emoji as 2.

EUC-KR: the Korean precomposed encoding

EUC-KR is an encoding based on the Korean industrial standard KS X 1001. English letters and digits are 1 byte, and characters included in KS X 1001 are 2 bytes. KS X 1001 contains 2,350 frequently used Hangul syllables, 4,888 Chinese characters (hanja), kana, Greek and Cyrillic letters, and various symbols.

The problem is that it includes only 2,350 of the 11,172 modern Hangul syllables. Characters that are not on the list, such as ‘똠’, ‘햏’ and ‘뷁’ (rare but valid syllables), cannot be represented with the standard two EUC-KR bytes. An annex of the standard defines an 8-byte composition method, but few programs support it, so these characters are usually replaced with ‘?’ or cause an error.

CP949: extended precomposed Hangul

CP949 (Microsoft's ‘Unified Hangul Code’) extends EUC-KR so that all 11,172 modern Hangul syllables fit in 2 bytes. It was the default Korean code page on Windows, so it is widely used in older Korean documents and systems. The common convention of ‘English = 1 byte, Korean = 2 bytes’ mostly comes from this encoding.

When bytes matter

How this tool calculates bytes

UTF-8 bytes are calculated exactly from each character's code point. For EUC-KR and CP949, the tool checks each character against the actual character table of that encoding to see whether it can be represented in 2 bytes. Characters that cannot be represented (emoji, Hangul syllables missing from the table and so on) are usually replaced with a single ‘?’ byte, so they are counted as 1 byte, and the tool shows how many such characters there are. In essay mode, choosing ‘Bytes (Hangul = 2)’ as the basis counts the CP949 way.

Last updated: 2026-09-23

Open the character counter →