文字数とバイト数の違い(UTF-8・原稿用紙換算)
「文字数」と「バイト数」は別の単位です。SNSの投稿制限は文字数で決まることが多い一方、システムの容量制限や通信量はバイト数で決まることがあります。同じ文章でも、英数字だけなら文字数とバイト数はほぼ一致しますが、日本語を含むとバイト数は文字数より大きくなります。本記事はUTF-8でのバイト数の仕組みと、改行・空白の数え方、原稿用紙換算の考え方を説明します。
UTF-8でのバイト数の決まり方
UTF-8は文字の種類によって1文字が1〜4バイトになる可変長の符号化方式です。規格上、半角英数字(U+0000〜U+007F)は1バイト、多くの記号やラテン文字の拡張(U+0080〜U+07FF)は2バイト、ひらがな・カタカナ・漢字の大部分(U+0800〜U+FFFF)は3バイト、一部の絵文字など(U+10000以降)は4バイトになります。たとえば「こんにちは」は5文字ですが、UTF-8では1文字3バイト×5文字=15バイトです。アルファベットだけの「AYAME」は5文字5バイトで、文字数とバイト数が一致します。
改行・空白を含む数え方と含めない数え方
「文字数」として数えるときは、改行・スペース・タブも1文字として数えるのが基本です。一方、字数制限のルールによっては、改行や空白を除いた文字数を使う場合があります。たとえば改行1つと全角スペース1つを含む10文字の文章は、含める数え方では10文字、改行・空白を除くと8文字になります。どちらの数え方を使うかは、提出先のルールに合わせて確認してください。
原稿用紙換算の考え方
原稿用紙は1枚400字が標準です。改行を除いた文字数を400で割り、割り切れない分を1枚として切り上げます。たとえば改行を除いた文字数が850字なら、850÷400=2.125なので、原稿用紙3枚分です。400字ちょうどなら1枚、401字なら2枚という切り上げになる点に注意してください。
絵文字など特殊な文字の扱い
絵文字の一部(U+10000以降の文字)は、UTF-8では4バイトになります。たとえば顔の絵文字「😀」(U+1F600)はUTF-8で4バイトですが、プログラムの内部表現で広く使われるUTF-16では、1つの文字を2つの単位(サロゲートペア)で表すため、見た目は1文字でも文字列の長さを2と数えてしまう言語・関数があります。見た目の文字数で数えるツールでは、このような文字も1文字として数えます。字数制限のあるサービスに絵文字を含む文章を入力するときは、見た目の文字数と実際の判定結果が違うことがある点を知っておくと誤解を防げます。
参考資料
この記事の計算は文字数カウントツールでも確認できます。