この記事は韓国語の文章が対象です。韓国の携帯メッセージは90バイトまでが短文(SMS)、それを超えると長文(LMS)になります。「90バイトまで」とはよく聞きますが、ハングルで何文字なのかは計算してみると意外と迷います。ハングルは1文字2バイト、英字・数字・スペースは1バイトなので、混ぜるとさらに多く入りますし、絵文字が1つ入るだけで計算も変わります。Geuljasu のバイト数計算ツールと同じ基準で、数え方と実際に計算した値をまとめました。
90バイトの数え方
バイト数は、文字をどの文字コードで保存するかによって変わります。韓国のメッセージで一般的に使われるのはEUC-KRで、Webで使うUTF-8とはハングル1文字の大きさが異なります。
| 文字の種類 | EUC-KR(近似) | UTF-8 |
|---|---|---|
| 英字・数字・スペース・基本記号 | 1バイト | 1バイト |
| ハングル1文字 | 2バイト | 3バイト |
| 漢字・かな・絵文字など | 2バイト(近似) | 文字により異なる(絵文字は4バイト前後) |
Geuljasu は英字・数字を1バイト、それ以外の文字を2バイトとして数えた値を「EUC-KR近似」として表示し、この値が90以下なら短文、2,000以下なら長文と判定します。EUC-KRで表せない絵文字なども2バイトで数えます。あくまで近似値なので、実際の基準は通信事業者や配信事業者の案内で確認してください。
同じ90バイトでも文字数はこれだけ違う
ハングル45文字はEUC-KRでちょうど90バイトで、46文字になると92バイトになり長文に移ります。英数字だけで90文字を埋めると、ちょうど90バイトです。同じ90バイトでも、使う文字によって30文字から90文字まで差が出ます。「45文字まで」とだけ覚えていると、数字の混ざった実際の文面で計算が狂います。
実際の文面で計算してみる
Geuljasu の計算関数で求めた値です。韓国語の文面は入力した原文のまま、かっこ内は日本語の意味です。
| 文面 | 文字数 | EUC-KR近似 | UTF-8 | 種類 |
|---|---|---|---|---|
| [배송] 주문하신 상품이 오늘 출고되었습니다. 운송장 1234567890 (ご注文の商品が本日出荷されました。送り状番号付き) | 40文字 | 61バイト | 82バイト | 短文 |
| Your verification code is 482915. Valid for 3 minutes. | 54文字 | 54バイト | 54バイト | 短文 |
| [글자수닷컴] 안녕하세요, 예약하신 상담이 내일 오후 3시로 확정되었습니다. 방문 전 연락 부탁드립니다. (ご予約の相談が明日午後3時に確定しました。ご来訪前にご連絡ください) | 58文字 | 99バイト | 140バイト | 長文 |
3つ目の案内文は58文字しかありませんが、99バイトで9バイト足りず長文になります。この文面を90バイトで切ると、「…방문 전 연락 부탁」(「ご来訪前にご連絡を」にあたる部分)までの53文字が残ります。文字の途中で切らない方式で計算した結果です。絵文字が1つ付くだけでも変わります。韓国語のあいさつ「안녕하세요 😀」は7文字ですが、EUC-KR近似で13バイトです。
短文と長文の分け方
91バイトからは長文になり、ツールは2,000バイトまでを長文として扱います。ハングルだけなら1,000文字前後です。短文と長文で送信料金が違うサービスが多いので、少し削れば90バイトに収まるかを先に確認するのがおすすめです。
自分で確認するコード
ブラウザのコンソールに貼り付けると、文面のバイト数と種類がすぐ分かります。Geuljasu のバイト数計算ツールと同じ近似ルールです。
// EUC-KR近似: ASCIIは1バイト、それ以外は2バイト
function smsBytes(text) {
let eucKr = 0;
for (const ch of text) eucKr += ch.codePointAt(0) < 0x80 ? 1 : 2;
const utf8 = new TextEncoder().encode(text).length;
return { eucKr, utf8, kind: eucKr <= 90 ? '短文' : eucKr <= 2000 ? '長文' : '超過' };
}
smsBytes('[배송] 주문하신 상품이 오늘 출고되었습니다. 운송장 1234567890');
削るときの確認点
- スペースと改行もバイトです。 改行1つが1バイトなので、行を細かく分けた文面は思ったより早くいっぱいになります。
- かっこ・角かっこ・ピリオドは1バイトですが、全角記号(「」や※など)は2バイトで数えます。
- 配信サービスが自動で入れる文言(広告表記や受信拒否の案内)が別に加わることがあるため、90バイトにぴったり合わせると超える場合があります。数バイトの余裕を持たせてください。
- 絵文字はなるべく避けましょう。 近似計算でも2バイトで、実際の配信規格では端末やサービスにより扱いが変わることがあります。
文面を貼り付けて90バイトに合わせて切るにはバイト数計算を、空白を含む・除く文字数や原稿用紙の枚数までまとめて見るには文字数カウントをお使いください。