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 range | Bytes | Examples |
|---|---|---|
| U+0000 – U+007F | 1 | English letters, digits, basic symbols |
| U+0080 – U+07FF | 2 | é, ñ, Greek, Cyrillic and Arabic letters |
| U+0800 – U+FFFF | 3 | Hangul, Chinese characters, kana |
| U+10000 – U+10FFFF | 4 | Most 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
- Text messages: Korean messaging services commonly describe a short message (SMS) as 90 bytes and count Hangul as 2 bytes, which is about 45 Korean characters. Going over switches the message to a long message (LMS), which may be billed differently, so check the exact rules of the service you use.
- Database fields: with settings that measure length in bytes, such as Oracle's VARCHAR2, 20 English characters and 20 Korean characters take up different amounts of space. In a UTF-8 database, each Korean character uses 3 bytes.
- Public and financial forms: forms connected to older systems sometimes set input limits in bytes.
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