てがるツール

文字数カウントツールを使うと、英字と日本語でバイト数が異なることに気づきます。英字「A」は1バイトなのに、ひらがな「あ」は3バイト——なぜ文字によってバイト数が違うのでしょうか。

この違いは文字コード(エンコーディング)の仕組みによるものです。特に現在最も広く使われている UTF-8 の特性を理解することで、文字数とバイト数の違いが見えてきます。

文字コードとは

コンピュータは文字をそのまま扱えません。すべての文字に番号(コードポイント)を割り当て、その番号をバイト列として保存する仕組みが「文字コード」です。

最も古い文字コードのひとつが ASCII(アスキー)です。英字・数字・記号など128種類の文字を7ビット(1バイト)で表します。「A」は65番、「a」は97番、「0」は48番というように割り当てられています。英語圏の文書はこれで十分でしたが、日本語・中国語・アラビア語など世界の言語を扱うには全く足りませんでした。

UTF-8の仕組み

世界中のすべての文字を統一的に扱うために作られたのが Unicode という規格です。Unicodeはひらがな・漢字・絵文字を含む140万種以上の文字にコードポイントを割り当てています。

UTF-8はそのUnicodeを実際にバイト列に変換する方式のひとつで、可変長エンコーディングという仕組みを採用しています。コードポイントの大きさに応じて1〜4バイトを使い分けます。

文字の種類UTF-8のバイト数
ASCII文字(英数字・記号)A、0、!1バイト
ラテン拡張・キリル文字などé、ñ、Ж2バイト
ひらがな・カタカナ・漢字・韓国語あ、ア、漢、한3バイト
絵文字・一部の漢字(CJK拡張)😀、𠮷4バイト

ひらがな「あ」のUnicodeコードポイントはU+3042です。この値は2バイトでは表現できる範囲を超えているため、UTF-8では3バイトを使って表現します。

バイト数が実務に影響する場面

  • APIのリクエストサイズ制限:多くのAPIは「バイト数」で上限を設けています。日本語のテキストは文字数の3倍のバイト数になるため、文字数だけを見て制限以内と判断すると超過することがあります。
  • データベースの設計:MySQLのVARCHAR(255)は「文字数」ではなく「バイト数」で管理されることがあります。utf8mb4では1文字最大4バイトのため、VARCHAR(255)に入れられる日本語は最大63文字になる場合があります。
  • ファイルサイズの見積もり:日本語のテキストファイルは英文と比べて同じ文字数でも3倍近いサイズになります。
  • SMS・メッセージングAPIの文字制限:SMSはUCS-2エンコーディングを使うことが多く、日本語は1文字2バイトとして70文字が1通の上限になるケースがあります。