エンコードモード

別名: データモード, モード指示子, 数字モード, 英数字モード, バイトモード, 漢字モード, Encoding modes

定義

エンコードモードは、QRコードが文字をビットに詰め込む方式です。主なモードは、数字、英数字、バイト、漢字の4つで、1つのコードの中でモードを切り替えることもできます。

4つの主なモード

各モードは、扱える文字の範囲と密度のトレードオフになっています。数字モードは数字しか扱えませんが、3桁を10ビットに詰め込めます。バイトモードはどんなバイトでも扱えますが、1バイトごとに8ビットを使います。

英数字モードは、45文字の集合を扱います。数字0〜9、大文字A〜Z、スペース、記号の $ % * + - . / とコロンです。小文字は含まれないため、すべて大文字のURLのほうが、同じURLを小文字で書くよりも、小さなコードになることがあります。

  • 数字:0〜9の数字、3桁で10ビット
  • 英数字:45文字、2文字で11ビット
  • バイト:任意の8ビット値、1バイトで8ビット
  • 漢字:シフトJISの2バイト文字、1文字で13ビット

モード指示子とセグメント

データの各区間は、4ビットのモード指示子と文字数から始まります。文字数のビット長は、モードと型番によって決まります。1つのコードには、こうしたセグメントを複数入れられます。たとえば、長い数字の並びは数字モードで、残りはバイトモードでエンコードすると、コードを小さくできることがあります。

ほかの4ビットの指示子は、文字集合ではなく機能を表します。文字エンコーディングを宣言するECI、データを複数のコードに分割する構造的連結、GS1などの業界のデータ形式向けのFNC1です。データは、4つのゼロのビットでなる終端パターンで終わります。

  • 数字 0001、英数字 0010、バイト 0100、漢字 1000
  • ECI 0111、構造的連結 0011
  • FNC1 第1位置 0101、第2位置 1001
  • 終端パターン 0000

バイトモードと文字セット

規格では、バイトモードの既定の解釈はISO-8859-1(Latin-1)ですが、最近のジェネレーターの多くは、アクセント付きの文字、ほかの文字体系、絵文字が失われないよう、UTF-8で書き込みます。リーダーは、たいていバイト列を調べてUTF-8を検出します。

文字セットを曖昧にできない場合は、ECIヘッダーで明示的に宣言できます。ECIがないと、リーダーがまれに誤って推測し、文字化けした文字を表示することがあります。

よくある質問

小文字が入るとQRコードが大きくなるのはなぜですか?

小文字は英数字の集合に含まれないため、テキストはバイトモードになり、1文字あたり5.5ビットではなく8ビットを使うことになるからです。大文字、数字、いくつかの記号は、より密に詰め込めます。

QRコードに、絵文字や日本語などのラテン文字以外のテキストを入れられますか?

はい。バイトモードでUTF-8を使います。多くのジェネレーターやスマートフォンのリーダーが対応しています。そうした文字は1文字で複数バイトを使うので、入る量は減ります。

1つのQRコードに、数字とテキストを混ぜて入れられますか?

はい。データをセグメントに分割し、それぞれに別のモードを使えます。優れたエンコーダーは、コードが最も小さくなる分け方を選びます。

出典と規格

すべての用語