SMS-SUBMITメッセージ用オンラインPDUエンコーダー
メッセージを、GSMモデムがPDUモードで待つ16進文字列に変換します。エンコーダーはGSM-7のセプテットを詰め込み、必要ならUCS-2へ切り替え、複数パートが必要なときはUDHを追加します。
SMS-SUBMITのPDUを組み立てる
フォームはサンプル入りで開きます。本文、番号、パラメータを変えて「エンコード」を押してください。結果はこの端末上のJavaScriptが生成します。
PDUエンコーダー
ネットワーク不要| パート | UDH | このパートの本文 |
|---|
各ブロックは----- PDU n/total -----の行で始まります。PDUモードでは、ブロックごとの16進文字列を個別に送ってください。
ここに入力した内容はどこへも送信されません。ローカルファイルやサイトのオフラインコピーからも動作します。
PDUモードとは
PDUモードは、単なる文字列ではなくプロトコルのフレーム全体をモデムへ渡します。
SMSは本文だけではありません。メッセージの周囲にはサービスセンターのアドレス、宛先、文字コードの標識、有効期限、長さの項目があります。テキストモード(AT+CMGF=1)ではモデムがこれらを埋め、読める部分だけを見せます。PDUモード(AT+CMGF=0)ではフレーム全体を16進で指定するため、すべての項目を自分で制御できます。
フレームは3GPP TS 23.040、文字アルファベットと7ビットの詰め込みはTS 23.038で定義されています。エンコーダーは両方に従い、番号から数字以外を除き、BCDのペアを入れ替え、アドレス種別のオクテットを設定し、GSM-7かUCS-2かを選び、セプテットを順に詰め、メッセージが分割されるときはユーザーデータヘッダーの標識を含めます。
本文が妙に見える理由。7ビットの文字は8ビットのオクテットに詰め込まれるため、1つのセプテットが2バイトにまたがることがあります。GSM-7のPDUは文字ごとのバイト列ではなく、手で編集すると壊れやすいものです。
先頭オクテットが重要な理由。サービスセンターの後のオクテットは、メッセージ種別、配信レポートの要求、連結の標識を運びます。エンコーダーは0x01に、連結なら0x40、有効期限を設定したら0x10、レポートを要求したら0x20を加えます。
SMS-SUBMITの項目構成
結果を左から読むと、項目は次の順に並びます。
| 項目 | オクテット | 運ぶ内容 | エンコーダーが書く値 |
|---|---|---|---|
| SCA | 1 + n | サービスセンターのアドレスとアドレス種別オクテット | 空欄なら00、それ以外は長さのオクテット、アドレス種別、BCD数字 |
| 先頭オクテット | 1 | メッセージ種別、有効期限の形式、レポート要求、データヘッダーの標識 | SMS-SUBMITは01、必要に応じて40、10、20を加算 |
| MR | 1 | 端末が増やしていくメッセージ参照 | 連結参照番号を1オクテットに切り詰めた値。未設定なら00 |
| 宛先 | 2 + n | 番号の長さ、アドレス種別、BCD数字 | 国内番号は81、入力が+で始まる場合は91 |
| PID | 1 | プロトコル識別子 | 00、通常のショートメッセージ |
| DCS | 1 | アルファベットとメッセージクラス | GSM-7は00、UCS-2は08、フラッシュSMSは10または18 |
| VP | 0、1、7 | 有効期限:相対、拡張、絶対 | 0時間なら含めない。それ以外は相対の1オクテットで、刻みは範囲に応じて伸びる(5分、30分、1日、1週) |
| UDL | 1 | ユーザーデータの長さ | GSM-7はセプテット数(UDHもセプテットで数える)、UCS-2はオクテット数 |
| UD | n | 任意のUDHと詰め込まれた本文 | 整列したUDHの後ろに7ビット詰め込み、またはUCS-2を上位バイトから順に |
相対の有効期限は1オクテットです。0–143は5分刻みで最大12時間、144–169は30分刻みで最大24時間、170–196は1日刻みで最大30日、197–255は週刻みでそれ以上を、いずれもサービスセンターがメッセージを受け取った時点から数えます。ツールは0–8760時間(約1年)を受け付けます。
GSM-7、UCS-2、連結SMS
1つのPDUは140オクテットを運びます。何文字入るかはアルファベットとUDHの有無で決まります。
| 文字コード | 1つのPDU | 8ビットUDHあり | 16ビットUDHあり |
|---|---|---|---|
| GSM-7 | 160セプテット | 153セプテット | 152セプテット |
| UCS-2 | 70単位 | 67単位 | 66単位 |
6バイトのUDHは48ビットを占め、GSM-7では7セプテット分に切り上げられます。16ビット参照はさらに1オクテット、1スロットを加えます。そのため分割の上限は160ではなく153または152になります。
GSM-7はラテン文字、数字、GSM基本アルファベットの記号を扱います。次の10文字は2セプテットを必要とします:€、^、{、}、[、]、~、|、バックスラッシュ、改ページ記号。エンコーダーはこれらの前にエスケープ1Bを書き、パート間で対を分断しません。どちらの表にもない文字はUCS-2を強制し、1文字が2オクテット、上限は70に下がります。
分解した例
これらの結果は、このページに付属する回帰テストファイルから取っています。入力は固定で、期待する16進文字列はTS 23.038 / TS 23.040の独立実装で得たものです。
| 入力 | 文字コード | PDU |
|---|---|---|
| Hello SMSDeliverer.com! | GSM-7、国内番号、サービスセンターなし | 000100098121436587F9000017C8329BFD064D9B5362999DB697E565B96BFC6E8700 |
| € | GSM-7、拡張文字 | 000100098121436587F90000029B32 |
| 您好,世界! | UCS-2 | 000100098121436587F900080C60A8597DFF0C4E16754CFF01 |
テスト記録はassets/js/tests/pdu-vectors.jsonです。古いビルドで記録された行も含まれ、そのベクターは不具合の説明付きで失敗として記録されています。通るようになるまで修正しません。
テキストモードではなくPDUが必要なとき
テキストモードは読みやすい方式です。PDUモードは、実際に何が送られるかを制御できる唯一の方法です。
長いメッセージ
連結SMSはUDHで結ばれた複数のPDUです。パート、その順序、参照番号はPDUモードでしか見えません。
連携
ゲートウェイ、テストベンチ、AT+CMGSへフレームを渡すキューを作るなら、モデムの文字列解釈ではなく正確なオクテットが必要です。
診断
文字化け、消えたアクセント文字、壊れた分割は、多くの場合DCSの誤りかUDHの破損です。どちらもここで見えます。
どちらのモードも同じネットワークに届き、課金も同じです。違うのはフレームをどこで組み立てるか、モデムの中か、検証できるプログラムかです。特定のアルファベット、有効期限、レポート要求をメッセージに載せるなら、PDUモードが近道です。テキストモードは手早い確認用に残り、このサイトのデコーダーは届いた任意のフレームを読みます。
自動化が必要ですか
このページは参照用のツールです。SMS Delivererはキュー内の各メッセージで同じ処理を行います。
Windowsアプリは長いメッセージを分割し、GSM-7かUCS-2かを選び、UDHの参照番号を設定し、失敗したパートを再試行し、配信レポートを連絡先のそばに保存します。同じ符号化経路が1通にも数千通にも働き、通信はお手持ちのモデムのSIMカードが担います。
GSMモデムの解説はハードウェア側を、Windows版ソフトのページは送信とレポートの機能を説明します。PDUデコーダーはモデムや端末から取り出したフレームを読みます。
エンコーダーの結果に含まれるもの
- GSM-7のセプテット詰め込みと拡張文字の対
- サロゲートペアを保ったUCS-2
- 8ビットと16ビットの連結参照
- 国内形式と国際形式の宛先
- 相対の有効期限とフラッシュのクラス
2026-11に確認。無料体験版は送信経路の全体を試せます。このツールにライセンスもインストールも不要です。
購入者がよく尋ねる質問
このエンコーダーは無料ですか、アカウントは必要ですか?
無料でアカウントも不要です。ページはHTMLとJavaScriptだけでできており、サイトのオフラインコピーからも動作します。
PDUが00で始まるのはなぜですか?
先頭オクテットはサービスセンターのアドレス長です。00はPDUがサービスセンターを含まず、端末やモデムがSIMに書かれた値を使うことを意味します。フレームに含めたい場合はサービスセンター番号を入力してください。
長いメッセージが複数のPDUになったのはなぜですか?
1つのPDUは140オクテットです。GSM-7は160セプテット、6バイトのUDHがあると153セプテット、UCS-2は70単位、同じヘッダーで67単位です。本文は文字の境界で分割され、各パートに順序番号が付きます。
結果はAT+CMGSで送れますか?
はい。AT+CMGF=0でモデムをPDUモードにし、サービスセンター項目の後にフレームのオクテット数を渡します。1パートずつ順序を保って送ってください。端末はUDHの参照番号と順序番号でパートを組み立てます。