zbarライブラリを使用してコードをスキャンする Android アプリケーションを構築しようとしています。UTF-8 エンコーディングで QR コードを生成し、この Android アプリを使用してスキャンしています。私がエンコードしているテキストは「L'étoile」です。デフォルトの zbar テスト プログラムを試してみたところ、アクセント付きの文字が正しく表示されないことに気付きました。そのため、デバッグして文字を正しく表示できない理由を理解するために、以下のコードを少し変更しました。
byte[] bytes = sym.getDataBytes();
String latin1Result = new String(bytes, "ISO8859-1");
String utf8Result = new String(bytes, "UTF-8");
Log.d("CUSTOM_DEBUG_TAG", "result " + sym.getData() + ", string " + sym.getData().toString() + ". latin1 result " + latin1Result + ". utf8 result " + utf8Result);
私が得るログから:
CUSTOM_DEBUG_TAG(11987): result L'テゥtoile, string L'テゥtoile. latin1 result L'ï¾ï½©toile. utf8 result L'テゥtoile
文字セットとエンコーディングに関しては少し迷っていますので、ご容赦ください。上記のログから、zbar ライブラリが実際に UTF-8 でエンコードされた文字列 "L'étoile" を返していると断言できますか? もしそうなら、それはログに正しく表示されるべきではありませんか?
zbar は iconv を使用し、デフォルトで ISO-8859-1 になっていると思います。そこで、iso-8859-1 でエンコードされたテキストを使用して QR コードを生成しようとしました。次に、Android アプリケーションで QRcode を読み取ろうとすると、ログに次のように表示されました。
CUSTOM_DEBUG_TAG(11987): result L'騁oile, string L'騁oile. latin1 result L'é¨oile. utf8 result L'騁oile
ご覧のとおり、アクセント付きの文字列 "L'étoile" を取得できません。明らかに、私が把握できない概念があり、何らかの助けを期待しています.
ちなみに、QR Droid や Zxing などのアプリケーションで同じ QRcode をスキャンすると、文字列は正しく "L'étoile" と表示されます (したがって、QRcode 自体に問題がある可能性があるという事実は破棄します)。
ありがとう