テキストのバイト数を、UTF-8とShift_JISの両方で表示します。文字数制限がバイト単位で決まっているシステムの確認に使えます。
文字コードによるバイト数の違い
「全角は2バイト」という説明を見かけますが、これはShift_JISの話です。現在主流のUTF-8では、日本語1文字は3バイトになります。
| 文字 | UTF-8 | Shift_JIS |
|---|---|---|
| 英数字 | 1バイト | 1バイト |
| 半角カナ | 3バイト | 1バイト |
| ひらがな・漢字 | 3バイト | 2バイト |
| 絵文字 | 4バイト以上 | 非対応 |
バイト数が問題になる場面
- データベースのカラム長(VARCHAR(20) がバイト単位か文字単位かは設定次第)
- レガシーシステムの固定長ファイル
- SMSの文字数制限
- ファイル名の長さ制限
- APIのリクエストサイズ上限
文字数とバイト数を混同しない
「20文字まで」と「20バイトまで」はまったく別の条件です。UTF-8で日本語を扱う場合、20バイトでは6文字しか入りません。仕様書を読むときは、どちらの単位かを必ず確認してください。
文字数制限を確認する
システムの仕様書に「20文字まで」と書かれていても、実装がバイト数で制限していることがあります。日本語を入力したときに途中で切れる場合は、この違いが原因です。
テストでは、英数字だけでなく日本語・絵文字を含む入力も試してください。想定外の場所で文字化けや切り捨てが起きます。
よくある質問
Q UTF-8で日本語は何バイトですか?
ひらがな・カタカナ・漢字は3バイトが基本です。一部の文字は4バイトになります。
Q 「全角は2バイト」ではないのですか?
Shift_JISでは2バイトですが、UTF-8では3バイトです。使用する文字コードによって変わります。
Q 絵文字は何バイトですか?
UTF-8で4バイト以上です。肌の色や結合を含む絵文字は、さらに多くのバイト数になります。
Q 改行はカウントされますか?
されます。改行コードもLFで1バイト、CRLFで2バイトを消費します。
