私はAndroidアプリを開発しています.ZXingアプリで生成されたQRコードでバイト配列をエンコードしてデコードする必要があります。私の問題は、デコードされたメッセージが生成されたバイト配列と正確に一致しないことです。 Iは、増分インデックスを含むバイト配列に基づいて、QRコードを作成しようとし、すなわちZXingでbyte []をエンコードしてデコードする
input = [0, 1, 2, ..., 124, 125, 126, 127, -128, -127,... -3, -2, -1, 0, 1, 2, ...]
そして、QRコードでメッセージをエンコードすると応答側でそれを復号した後、私は、次のバイト配列出力を得る:
output = [0, 1, 2, ..., 124, 125, 126, 127, 63, 63,... 63, 63, 63, 0, 1, 2, ...]
"負の"バイト値はすべてASCII char 63になります。 '?'疑問符文字。 誰かがこの種の問題(other topic treating the same kind of issueまたはhere)の解決策であると主張しているISO-8859-1を使用しているため、私は間違いがどこにあるのかわかりません、または私がエンコードまたはデコードの開始中にステップをスキップしている場合。ここで 私は指定されたバイト配列をコードするために実行するコードです:
String text = "";
byte[] res = new byte[272];
for (int i = 0; i < res.length; i++) {
res[i] = (byte) (i%256);
}
try {
text = new String(res, "ISO8859_1");
} catch (UnsupportedEncodingException e) {
// TODO
}
Intent intent = new Intent(Intents.Encode.ACTION);
Intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
intent.putExtra(Intents.Encode.TYPE, Contents.Type.TEXT);
intent.putExtra(Intents.Encode.FORMAT, "ISO8859_1");
intent.putExtra(Intents.Encode.DATA, text);
intent.putExtra(Intents.Encode.FORMAT, BarcodeFormat.QR_CODE.toString());
boolean useVCard = intent.getBooleanExtra(USE_VCARD_KEY, false);
QRCodeEncoder qrCodeEncoder = new QRCodeEncoder(activity, intent, dimension, useVCard);
Bitmap bitmap = qrCodeEncoder.encodeAsBitmap();
をそして、QRコードを復号化するために、私は、次のテント
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.qrcodeDecoding);
Intent intent = new Intent(Intents.Scan.ACTION);
intent.putExtra(Intents.Scan.MODE, Intents.Scan.QR_CODE_MODE);
startActivityForResult(intent, 0);
}
を送信し、結果を待つ:
@Override
protected void onActivityResult(int request, int result, Intent data)
{
if(request == 0)
{
//action
if(result == RESULT_OK)
{
String res = data.getStringExtra(Intents.Scan.RESULT);
byte[] dat = null;
try{
dat = res.getBytes("ISO8859_1");
} catch(UnsopportedEncodingException e) {
//TODO
}
}
else if(result == RESULT_CANCELED)
{
//TODO
}
}
}
を
あなたは私の間違いがどこにあるのか教えてください。
はあなたが外装のいくつかの種類を使用せずに、有効な文字列に任意のバイナリデータを回すことができることを考えての間違いを犯している
フランク
UTF-8をエンコーディングとして使用するとどうなるのでしょうか? – Ixx
UTF-8は確かに動作しません。すべてのバイトシーケンスが有効なUTF-8シーケンスであるとは限りません。ほとんどの入力からそのように文字列を取得することさえできません。 –