1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

DialogAdvent Calendar 2021

Day 20

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

Last updated at Posted at 2021-12-20

はじめに

少しニッチな内容なのですが、ハンディターミナル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 端末向けの開発は減ってきていると思われますが、ご参考になれば幸いです。

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

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

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?