Android NDEF kayıt yükünde garip bir karakter

Android NFC ile kodlamaya yeni başladım, NDEF verilerini başarıyla okudum ve mifare classic etiketine yazdım. Sorun uygulama ndef kayıtlarından yükü okuduğunda, metnin başında her zaman '* en' karakterini içermesidir. Dil karakteri olduğunu düşünüyorum, ancak bu karakter olmadan gerçek metin mesajı nasıl alınır?

Bu, uygulamanın etiketten okuduğu ekran görüntüsüdür, asıl metin 'Merhaba Dünya' dır.

enter image description here Here is the code to read

@Override
public void onNewIntent(Intent intent) {
    Log.i("Foreground dispatch", "Discovered tag with intent: " + intent);
  //mText.setText("Discovered tag NDEF " + ++mCount + " with intent: " + intent);

    if (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(intent.getAction())) {
        Parcelable[] rawMsgs = intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES);

        if (rawMsgs != null) {
            NdefMessage[] msgs = new NdefMessage[rawMsgs.length];

            for (int i = 0; i < rawMsgs.length; i++) {
                msgs[i] = (NdefMessage) rawMsgs[i];
            }

            NdefMessage msg = msgs[0];

            try {
            mText.setText(new String(msg.getRecords()[0].getPayload(), "UTF-8"));
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}
8
Bence "en" "İngilizce" den geliyor. Yanlışlıkla dil kodunu eklediğinizden neredeyse eminim. Dil etiketini xml'nizde değiştirirseniz başka bir karakter sırası elde edebilirsiniz. Lütfen bunu deneyin, çünkü bu yolla en azından nereden geldiğini bileceksiniz ve bir çözüm için google'da arama yapabilirsiniz.
katma yazar Lajos Arpad, kaynak
Lajos, Ben ... yorumlarınız için teşekkürler, NFC Etiket bilgisini başka bir uygulamayı kullanmayı denedim, uygulama 'Merhaba Dünya'yı gösteriyor. Ancak Nils Pipenbrik'in açıkladığı gibi sorunu buldum. Bu bağlantı code.google.com/p/openmobster/wiki/NFC gösteriyor faydalı veriyi doğru okuma.
katma yazar Lorensius W. L. T, kaynak
katma yazar ThomasRS, kaynak
Etiketi yazan kodu gönderebiliyorsanız, yararlı olacaktır. Etiketi nasıl yazdığına ya da okuduğunuz biçimde olup olmadığına bakmak için etiketinizi okumak için başka birinin uygulamasını kullanmayı denediniz mi? (Ndef Mesajı'ndakiyle aynı bilgiyi görüntülerse, yalnızca "Merhaba Dünya ..." görüntülerse, yazma sorunudur.)
katma yazar Ben Ward, kaynak

1 cevap

Gördüğünüz, UTF8'e dönüştürülmüş bir NDef metin kaydının ham verileridir.

NDef metin kaydı şöyle oluşturulur:

İlk bayt: Kontrol Bayt

Bit 7: 0: Metin UTF-8 1 ile kodlanmıştır: Metin   UTF16

     

Bit 6: RFU (sıfıra ayarlı OLMALIDIR)

     

Bit 5..0: IANA dil kodunun uzunluğu.

Bunu, RFC 3066'da tanımlandığı gibi US-ASCII'de (sizin durumunuzda en) saklanan dil kodu izler. Dil kodunun uzunluğu kontrol baytında verilir.

Ve bunu kontrol baytının bit 7'si ile belirtilen formattaki metin izler.

Boş kare karakter, ham verilerin UTF-8'e dönüştürülmesinden gelir. Durumunuzdaki kontrol baytının 2 sayısal değeri olduğundan neredeyse eminim. Bu sayısal değer için yazdırılabilir bir karakter olmadığından, unicode-set'teki yazdırılamaz yer tutucu karakter ile değiştirilir. Bu genellikle boş bir kare olarak görüntülenir.

14
katma
Merhaba Nils, cevabınız için teşekkür ederim, şimdi yük verilerini doğru şekilde nasıl okuyacağımı biliyorum, bu bağlantı code.google.com/p/openmobster/wiki/NFC , nasıl yapılacağını gösterir. ;)
katma yazar Lorensius W. L. T, kaynak
Ayrıca, burada NDEF Metin Kayıt Türü tanımı, başkalarına yardımcı olacağını umuyorum .. maintag.fr/fichiers/pdf-fr/nfcforum-ts-rtd-text-1-0.‌ pdf
katma yazar Lorensius W. L. T, kaynak
Bir dahaki sefere, lütfen bağlantıları kopyalamak yerine değerleri kopyalayıp yanıtınıza yapıştırın. Her iki link de öldü !!
katma yazar nemicolopterus, kaynak