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の検出に任せています。