文字数とバイト数は違う
文字数は人が見る文字の個数で、バイト数はその文章をコンピューターに保存するときに占める大きさです。同じ文字でも、どの文字エンコーディング(文字を数値に変換する規則)を使うかによってバイト数が変わります。英字と数字はほぼすべてのエンコーディングで1バイトですが、ハングルはエンコーディングによって2バイトにも3バイトにもなります。
UTF-8:今日の標準
UTF-8は、Webページやほとんどの現代的なソフトウェアが使うエンコーディングです。Unicodeの番号(コードポイント)の大きさに応じて1〜4バイトを使います(RFC 3629)。
| コードポイントの範囲 | バイト | 例 |
|---|---|---|
| U+0000 ~ U+007F | 1 | 英字、数字、基本的な記号 |
| U+0080 ~ U+07FF | 2 | é、ñ、ギリシャ・キリル・アラビア文字 |
| U+0800 ~ U+FFFF | 3 | ハングル、漢字、かな |
| U+10000 ~ U+10FFFF | 4 | ほとんどの絵文字、古代文字 |
ハングルの完成形音節(가〜힣、U+AC00〜U+D7A3)はすべて3番目の範囲にあるため、UTF-8では1文字3バイトです。たとえば「안녕하세요」(こんにちは)は5文字、15バイトです。
UTF-16
JavaScript・Java・Windowsの内部で使われるUTF-16は、ほとんどの文字を2バイトで、絵文字のようにU+10000以上の文字を4バイト(サロゲートペア)で保存します。JavaScriptの文字列の長さが絵文字を2と数えるのはこのためです。
EUC-KR:韓国の完成形エンコーディング
EUC-KRは、韓国の産業規格 KS X 1001 に基づくエンコーディングです。英字・数字は1バイト、KS X 1001に含まれる文字は2バイトです。KS X 1001には、よく使うハングル音節2,350字と漢字4,888字、かな・ギリシャ文字・キリル文字とさまざまな記号が収録されています。
問題は、現代ハングル音節11,172字のうち2,350字しか含まれていないことです。「똠」「햏」「뷁」のように一覧にない文字は、基本のEUC-KRの2バイトでは表現できません。規格の附属書にある組み合わせ方式で8バイトを使う方法もありますが、対応するプログラムがまれなため、たいていは「?」に置き換わるかエラーになります。
CP949:拡張完成形
CP949(Microsoftの「統合型ハングルコード」)はEUC-KRを拡張し、現代ハングル11,172字をすべて2バイトで収録します。Windowsの韓国語の標準コードページだったため、古い韓国語の文書やシステムで広く使われています。英字1バイト・ハングル2バイトという「ハングル2バイト」の慣行は、ほとんどがこの方式に由来します。
バイト数が重要になる場面
- ショートメッセージ:韓国国内のメッセージサービスは、SMS(短文)を一般に90バイトと案内し、ハングルを2バイトとして数えます。ハングルでは約45字です。超えるとLMS(長文)に切り替わり料金が変わることがあるため、正確な基準は利用しているサービスの案内を確認してください。
- データベースのフィールド:OracleのVARCHAR2のように長さをバイトで測る設定では、同じ20字でも英字とハングルで占める大きさが異なります。UTF-8のデータベースなら、ハングル1文字は3バイトを使います。
- 公共・金融の書式:古いシステムと連携する書式では、入力欄の制限をバイトで設けている場合があります。
このツールの計算方法
UTF-8のバイト数は、各文字のコードポイントから正確に計算します。EUC-KRとCP949は、それぞれのエンコーディングの実際の文字表に基づき、文字ごとに2バイトで表現できるかを確認して計算します。表現できない文字(絵文字、一覧にないハングルなど)は通常「?」の1バイトに置き換わるため1バイトとして計算し、そうした文字がいくつあるかを別に表示します。設問別モードで制限の基準を「バイト(ハングル2)」にすると、CP949方式で数えます。
基準日: 2026-09-23