JavaScript、Ajax、HTML5(API)、Ruby…Web及び関連技術の実験&情報公開&制作物紹介。

Google Chart API の QRCode 生成機能で日本語を通す方法

| コメント(0) | トラックバック(0)

恥ずかしながら、つい最近まで Google Chart API でQRコードが生成できるの知りませんでした。

ということで、色々試してみました。
↓この画像は同APIで生成したものです。(半角カナで「ハロー ワールド」と表示されます)

ハロー ワールド

普通にURLだけをエンコードするだけなら手軽で簡単なのですが、上記のように日本語や半角カナを入れ込もうとするとちょっとコツが必要だったので、メモを残しておきます。

書式

結論から書けば、書式としては以下の通り。

http://chart.apis.google.com/chart?chs=200x200&cht=qr&chld=M|4&
choe=Shift_JIS&
chl=%EF%BE%8A%EF%BE%9B%EF%BD%B0...《後略》

(説明の都合上複数行に分割していますが、実際には1行です)

ポイントは2つ。

  • choe
    出力文字コードの指定。「Shift_JIS」を指定。
  • chl
    内容。文字列のエンコードはUTF-8で与えます。

chs(サイズ指定)、cht(「qr」を指定)、chld(エラー訂正レベルと余白のサイズを指定)はドキュメント化されているとおりです。

なお上記では説明のため、指定しているテキストはURIエンコードしていますが、ブラウザのロケーションバーに直接入力する場合は、最近のブラウザならきちんとUTF-8で送信してくれるのでエンコード不要な場合が多いです。ただしHTML中に記述する場合はエンコードした方が無難です。

以下、もう少し技術的に突っ込んだ解説(読み飛ばしOK)。

技術的考察

ポイント1:QRコードの内部文字コードは(実質)Shift_JIS

QRコードは、ご存じの方も多いと思いますが、日本国産の2次元コードフォーマットです。
QRコード®は、株式会社デンソーウェーブの登録商標です)
その辺の色々な事情があるのでしょう、QRコードで扱える文字コードはShift_JISだけです。
データとしてはバイナリデータ(8ビットバイト)を格納できるので、文字エンコードに無関係にデータを格納しようと思えば出来ますが、携帯電話(QRコードを読むデバイスとして代表的なモノ)で読み込むと、文字化けしちゃいます。

ポイント2:Google Chart API が受け入れる入力文字コードはUTF-8

Google Chart API では、chlパラメータで入力データを受け取ります。
上記「ポイント1」より、ここに普通にUTF-8のデータを指定すれば、普通に文字化けすることが容易に想像されます。
少し考えると、「じゃ、ここにShift\_JISでエンコードした上でURIエンコード(%xx%xxの形式)したものを指定すれば良いのでは?」と、思いつきます。が。これがダメでした。
実際、例えば↓
http://chart.apis.google.com/chart?chs=200x200&cht=qr&chld=M|4&choe=UTF-8&chl=%93%FA%96%7B%8C%EA
と指定(「%93%FA%96%7B%8C%EA」は「日本語」)してみると、QRコードは表示されますが、内容は空っぽです。Shift_JISでエンコードされたデータが全く無視されている感じです。

ポイント1 + ポイント2 → 入力はUTF-8、出力はShift_JIS

ということです←結論。

トラックバック(0)

トラックバックURL: http://www.antimon2.atnifty.com/mt5/mt-tb.cgi/79

コメントする

カテゴリ

月別 アーカイブ

OpenID対応しています OpenIDについて

このブログ記事について

このページは、あんちもん2が2010年5月24日 10:47に書いたブログ記事です。

ひとつ前のブログ記事は「オリジナル404ページ公開」です。

次のブログ記事は「第39回FLOSS桜山勉強会」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。