के साथ मैं एक एंड्रॉइड ऐप विकसित कर रहा हूं, और मुझे ज़ेडएक्सिंग ऐप से उत्पन्न क्यूआरकोड में बाइट्स सरणी को एन्कोड और डीकोड करने की आवश्यकता है। मेरी समस्या यह है कि मेरा संदेश डीकोडेड जेनरेट बाइट सरणी से बिल्कुल मेल नहीं खाता है।एन्कोडिंग और डिकोडिंग बाइट [] ZXing
: मैं एक QRCode incrementing अनुक्रमित युक्त एक बाइट सरणी के आधार पर, यानीinput = [0, 1, 2, ..., 124, 125, 126, 127, -128, -127,... -3, -2, -1, 0, 1, 2, ...]
और QRCode में संदेश एन्कोडिंग और प्रत्युत्तर तरफ इसे डीकोड के बाद, मैं निम्नलिखित बाइट सरणी उत्पादन प्राप्त बनाने की कोशिश की
output = [0, 1, 2, ..., 124, 125, 126, 127, 63, 63,... 63, 63, 63, 0, 1, 2, ...]
सभी "नकारात्मक" बाइट मान ASCII char 63: '?' में बदल दिए गए हैं प्रश्न चिह्न अक्षर। मुझे लगता है कि एन्कोडिंग वर्णमाला के साथ कुछ गलत हो रहा है, लेकिन चूंकि मैं आईएसओ -885 9 -1 का उपयोग कर रहा हूं, जो हर किसी को इस तरह के मुद्दे का समाधान करने का दावा करता है (other topic treating the same kind of issue या here), मुझे नहीं लगता कि मेरी गलती कहां है , या अगर मैं एन्कोडिंग या डिकोडिंग के अस्थिरता के दौरान एक कदम छोड़ रहा हूं। यहाँ कोड है कि मैं किसी दिए गए बाइट सरणी एन्कोड करने के लिए निष्पादित है:
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();
और एक QRCode डिकोड करने के लिए, मैं निम्नलिखित आशय
@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
}
}
}
क्या आप कृपया मुझे बता सकते हैं कि मेरी गलतियों कहां हैं, या मुझे कहां देखना चाहिए?
आप एक बहुत,
फ़्रैंक
बस "चारों ओर खेलना" (मुझे इसके बारे में कोई जानकारी नहीं है) क्या होता है यदि आप यूटीएफ -8 का उपयोग उदाहरण के लिए एन्कोडिंग के रूप में करते हैं? – Ixx
यूटीएफ -8 निश्चित रूप से काम नहीं करेगा। शुरू करने के लिए प्रत्येक बाइट अनुक्रम एक वैध यूटीएफ -8 अनुक्रम नहीं है। तो इस तरह से अधिकांश इनपुट से एक स्ट्रिंग प्राप्त करना भी संभव नहीं है। –