0

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 自体に問題がある可能性があるという事実は破棄します)。

ありがとう

4

2 に答える 2

5

試行錯誤の末、zbar は ISO-8859-1 エンコーディングを使用せず、特殊文字が見つかった場合は Shift_JIS を使用するようです。ここで私のために働くもの:

byte[] b = sym.getData().getBytes("Shift_JIS");
String value = new String(b, "UTF-8");
于 2014-02-26T17:36:50.930 に答える
0

ダッシュ(-)がありません。

String latin1Result = new String(bytes, "ISO-8859-1");

新しいString(bytes)を使用するだけで、デフォルトのプラットフォームエンコーディングが使用されるため、移植性の低いアプリケーションが作成されます。

それでも問題が解決しない場合は、文字列リテラルを試して、問題が出力にあるかどうかを確認してください。

String result = "\u00e9toile";
于 2012-12-29T23:18:16.140 に答える