株式会社ダイアログ Tech Blog

株式会社ダイアログのエンジニアチームが運営しています。

QRコードにも文字コードはある

はじめに

少しニッチな内容なのですが、ハンディターミナル1という機器のアプリケーション開発時に出会った事象をご紹介します。

事象

QRコードの読み取り結果が文字化けする。

原因

読み取った値をShift-JIS に変換して扱っていたが、QRコード文字コードがUTF8だったため、正しく変換されなかった。

対応

今回のHT開発で使用している.NET Compact Framework 3.52には文字コード判別の方法が用意されていないため、第三者作成のDLLを使うかロジックを自作する方法が考えられますが、今回は事前に文字コードが分かっているため、判断ロジックを入れずに対応しました。 以下は文字コード変換部分のコード抜粋です。

// QRコードがShift-JIS の場合
// Encoding クラスに用意されている文字コード以外のインスタンスを取得する際はGetEncoding を使う
System.Text.Encoding sjis = System.Text.Encoding.GetEncoding("shift_jis"); 
byte[] codeData = sjis.GetBytes(code); // code はstring 型の読み取った値
string result = sjis.GetString(codeData, 0, code.length);

// QRコードがUTF8 の場合
System.Text.Encoding utf8 = System.Text.Encoding.UTF8;
byte[] codeData = utf8.GetBytes(code); // code はstring 型の読み取った値
string result = utf8.GetString(codeData, 0, code.length);

さいごに

Android/iOS 向けのアプリ開発の場合、上記文字コードの考慮はあまり必要なさそうです。 Flutterのpub.dev で提供されているフリーのバーコードリーダーライブラリでも文字コードを自動的に判別して正しい読取結果を返してくれます。 昨今Windows CE 端末向けの開発は減ってきていると思われますが、ご参考になれば幸いです。

弊社は現在エンジニアを募集しております。 開発だけでなく、お客様の生の声を聴きながら要件定義から納品まで取り組むことも可能です。 選考前にカジュアル面談で弊社のことを知っていただくこともできますので、お気軽にご連絡ください。

https://www.wantedly.com/companies/company_3244501/projects


  1. 物流現場で使われることが多いバーコードを読み取る機械です。「ハンディ」、「HT」と省略されることが多いです。

  2. Windows CEベースのモバイル・組み込みデバイス上で動作するように設計された、アプリケーション開発・実行環境です。.NET Frameworkの完全なコピーではなく、より少ないスペース、リソース環境下において使用できるよう縮小されているため、開発時に利用したい機能が含まれていないことが判明するケースが稀にありました。引用: https://ja.wikipedia.org/wiki/.NET_Compact_Framework