Indesign9.2.1でのQRコード生成機能検証結果

資料を起こして不具合フォームから報告しようとした。でも3000文字も書くんじゃねー!って怒られたのでこちらに詳細を公開しておきますね。

errorQR.png

結論:漢字モード(SJISモード)のエンコード処理に問題がある。また、モード判定処理がおかしい。

以下はインデザイン上でQRコード生成機能で作成したコードの検証結果を表わします。また、同時にIllustrator上で機能するQRCodeMakerエクステンションによる結果も併記します。
デコード処理はZXingによります。

まず文字列「あああ」をコード化しての検証です。

//Indesign CC
Raw text
あああ
Raw bytes
40 9e 38 18 2e 38 18 2e 38 18 20 ec 11 ec 11 ec
Barcode format QR_CODE
Parsed Result Type TEXT
Parsed Result
あああ

SJISであるべき文字コード範囲ですがUTF-8で処理されています。

//QRCodeMaker Rev3(UTF-8)
Raw text
あああ
Raw bytes
40 9e 38 18 2e 38 18 2e 38 18 20 ec 11 ec 11 ec
Barcode format QR_CODE
Parsed Result Type TEXT
Parsed Result

QRCodeMakerにも同様にUTF-8で処理させました。結果は一致します。
続いて「テスト文字列」というテキストをエンコードします。

//Indesign
Raw text
繝�せ繝域枚蟄怜�
Raw bytes
80 9c e1 91 8c 27 39 c3 2f 34 01 f6 db 12 52 cb
80 ec 11 ec 11 ec 11 ec 11 ec 11 ec
Barcode format QR_CODE
Parsed Result Type TEXT
Parsed Result
繝�せ繝域枚蟄怜�

インデザインでは漢字モードを利用しています、しかし、このモードでのキャラクタカウントが「9」で異常です。正しくは「6」となるべきです。また、一定の法則に従って16bitを13bitに圧縮してデータを生成するべき所ですが正常に処理出来ていません。
下の例はQRCodeMakerで同じモードで処理した結果です。

//QRCodeMaker Rev.2(SJIS)
Raw text
テスト文字列
Raw bytes
80 60 d2 86 60 34 ef 76 50 d4 4c 40 ec 11 ec 11
Barcode format QR_CODE
Parsed Result Type TEXT
Parsed Result
テスト文字列

コード処理は正常です。正しく処理するとコード語数はここまで短くなります。

//QRCodeMaker Rev3(UTF-8)
Raw text
テスト文字列
Raw bytes
41 2e 38 38 6e 38 2b 9e 38 38 8e 69 68 7e 5a d9
7e 58 89 70 ec 11 ec 11 ec 11 ec 11
Barcode format QR_CODE
Parsed Result Type TEXT
Parsed Result
テスト文字列

ついでにUTF-8で処理した物です。

続いてもう少し長い文字列で検証します。「カランとか鏡とかぴっかぴかなものが水回りには沢山あります。」

//IndesignCC
Raw text
カランとか鏡とかぴっ縺九�縺九↑繧ゅ�縺梧��回りには沢山あります。
Raw bytes
41 ee 38 2a be 38 3a 9e 38 3b 3e 38 1a 8e 38 18
be 98 fa 1e 38 1a 8e 38 18 be 38 1b 4e 38 1a 38
0b ce 0a 08 c0 e9 9c 14 11 81 ab 38 41 63 03 76
70 51 cc 84 76 16 9c b3 73 dc 70 51 5c 70 35 7c
70 35 fc d6 54 5c b6 36 3c 70 30 5c 70 51 5c 70
37 dc 70 33 3c 70 10 40 ec 11 ec 11 ec 11 ec 11
ec 11 ec 11 ec 11 ec 11 ec 11 ec 11
Barcode format QR_CODE
Parsed Result Type TEXT
Parsed Result
カランとか鏡とかぴっ縺九�縺九↑繧ゅ�縺梧��回りには沢山あります。

Rawデータを見てみます。頭のbyteから4ですから0100のバイナリです。これはモードを表わし、このモードは8bit byteモードを表わします。通常UTF-8のエンコーディングデータをコード化する場合はこのモードで正しいのですが、続く2byteはコード数を表わします。0x1e=30ですからコードを30byte追いかけてみます。

e3 82 ab e3 83 a9 e3 83 b3 e3 81 a8 e3 81 8b e9 8f a1 e3 81 a8
e3 81 8b e3 81 b4 e3 81 a3

ここまでです。UTF-8の文字コードが10文字分並んでいます。続くデータはモード選択となります。データの圧縮率を高める為に文字コード毎に細かくモードきりかえを行なうケースがありますが、このケースでモード切替えを行なっても総データコード数に大きな違いは生じません。むしろ無駄です。最後尾を見ると20byteも埋め草が詰め込まれていますからね。

80 bc e0 a0 8c 0e 99 c1 4…

続きです、頭4bitが1000となっていますので漢字モードいわゆるSJISモードです。しかしながら正常なエンコーディング処理ができていません。それに、なぜこの「か」から始まる部分をSJISにしようと思ったのか理解不能です。
以下に正常なコード処理の見本をお付けします。

//QRCodeMaker Rev.3(UTF-8)
Raw text
カランとか鏡とかぴっかぴかなものが水回りには沢山あります。
Raw bytes
45 7e 38 2a be 38 3a 9e 38 3b 3e 38 1a 8e 38 18
be 98 fa 1e 38 1a 8e 38 18 be 38 1b 4e 38 1a 3e
38 18 be 38 1b 4e 38 18 be 38 1a ae 38 28 2e 38
1a ee 38 18 ce 6b 0b 4e 59 b9 ee 38 28 ae 38 1a
be 38 1a fe 6b 2a 2e 5b 1b 1e 38 18 2e 38 28 ae
38 1b ee 38 19 9e 38 08 20 ec 11 ec 11 ec 11 ec
11 ec 11 ec 11 ec 11 ec 11 ec 11 ec
Barcode format QR_CODE
Parsed Result Type TEXT
Parsed Result
カランとか鏡とかぴっかぴかなものが水回りには沢山あります。

//QRCodeMaker Rev2(SJIS)
Raw text
カランとか鏡とかぴっかぴかなものが水回りには沢山あります。
Raw bytes
81 d0 c5 07 24 3a 61 46 09 49 ff 82 8c 12 90 a9
05 04 25 21 52 09 48 52 02 c0 14 c0 95 2e 14 d6
21 68 0a 48 53 59 64 9d 20 90 05 a0 2b 81 37 00
10 00 ec 11 ec 11 ec 11 ec 11 ec 11 ec 11 ec 11
Barcode format QR_CODE
Parsed Result Type TEXT
Parsed Result
カランとか鏡とかぴっかぴかなものが水回りには沢山あります。

モード判定がおかしくて漢字モードが無いと錯誤していましたが、本当はモード判定に問題があるようです。しかもSJISコードを正常に扱えません。

最後に添付するのはQRCodeMaker Rev.3でUTF-8でコード化したものです。

qr_utf.png

広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中