ECI(拡張チャネル解釈)

別名: ECI, Extended Channel Interpretation, ECI指示子, 文字セットの宣言

定義

ECI(Extended Channel Interpretation、拡張チャネル解釈)は、バーコード内に入れるエスケープコードで、続くバイトをどう読むかを宣言します。たとえばECI 26はUTF-8です。多くのリーダーはこれを無視して、推測で読み取ります。

ECIの役割

ECIは、続くバイトにどの文字セットやデータの解釈を適用するかを、リーダーに伝えます。ECIがなければ、リーダーは既定値を仮定するか、バイト列そのものから推測しなければなりません。

ECIはQRコードだけのものではありません。この仕組みは、バーコード業界団体のAIMが定めたもので、Data Matrix、Aztecコード、PDF417、MaxiCodeなどのシンボルでも対応しています。

QRコードでのエンコード方法

ECIセグメントは、モード指示子0111で始まり、1〜3バイトのECI指示子の番号が続きます。その解釈は、データの終わりまで、または別のECIで変更されるまで有効です。

  • ECI 3:ISO-8859-1(Latin-1)
  • ECI 20:シフトJIS
  • ECI 26:UTF-8
  • 指示子の範囲は0〜999999です

実際の対応状況

ECIへの対応は一様ではありません。産業用や文書用のスキャナーは対応していることが多い一方、スマートフォンのカメラアプリの多くは無視し、バイト列を調べてUTF-8を検出します。最近の内容なら、たいていそれで問題なく動作します。

古いリーダーの中には、ECIヘッダーを想定しておらず、余計な文字を表示したり、内容を解析できなかったりするものもあります。日常的なURLやプレーンテキストでは、多くのジェネレーターがECIを付けず、UTF-8の検出に任せています。

よくある質問

QRコードのUTF-8テキストに、ECIは必要ですか?

たいていは必要ありません。スマートフォンのリーダーの多くはUTF-8を自動的に認識し、ECIは一部の古いリーダーを混乱させることがあります。産業用システムなど、データを厳密に解釈しなければならない場合に、最も役立ちます。

読み取ったQRコードに、おかしな文字が表示されるのはなぜですか?

バイトモードのデータについて、リーダーが文字セットを誤って推測した可能性があります。ECI 26でUTF-8を宣言するか、別のリーダーで試すと、原因を特定しやすくなります。

出典と規格

すべての用語