2011-10-27 15 views
8

Android NFC ile kodlamaya başladım, NDEF verilerini mifare classic etiketine başarıyla okudum ve yazdım. Sorun, uygulamanın ndef kayıtından yükü okuduğunda, metnin başında her zaman '* tr' karakterini içerir. Bence dil karakteri, ama o karaktersiz gerçek metin mesajını nasıl alabilirim? Android NDEF kayıt yükünde garip karakter

Bu

etiketinden okuduklarım uygulama ekran görüntüsü, gerçek metin 'Merhaba Dünya' İşte

enter image description here

kod Gördüğünüz, çiğ

@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(); 
      } 
     } 
    } 
} 
+0

"tr" in "ingilizce" geldiğini düşünüyorum. Dil kodunu yanlışlıkla eklediğinizden neredeyse eminim. Dil etiketini xml’nizde değiştirirseniz, başka bir karakter dizisi alabilirsiniz. Lütfen bunu deneyin, çünkü bu şekilde en azından nereden geldiğini biliyorsunuz ve bir çözüm için google'da arama yapabilirsiniz. –

+0

Etiketi yazan kodu gönderebilirseniz, yardımcı olabilir. Etiketinizi nasıl yazdığınızı görmek için etiketinizi okumak üzere okumak için başka birinin uygulamasını kullanmayı denediniz mi, yoksa nasıl okuyorsunuz? (Bu Ndef Mesajı olmak aynı bilgi görüntülerse yalnızca görüntüler, eğer bir yazma problemi o zaman bir okuma sorunudur "Merhaba Dünya ..." söz konusudur.) Yorumlarınız için –

+0

Lajos, Ben ... teşekkürler , Ben diğer uygulama, NFC Tag bilgi kullanarak denedim, uygulama 'Merhaba Dünya' gösterir. Nils Pipenbrik aşağıda açıklar gibi, ben sorunu bulduk. Http://code.google.com/p/openmobster/wiki/NFC adresindeki bu bağlantı, faydalı verilerin doğru bir şekilde nasıl okunacağını gösterir. –

cevap

14

okumak olduğunu olduğunu UTF8'e dönüştürülen bir NDef metin kaydının verileri.

İlk bayt:

NDef metin rekor böyle inşa edilir Control Byte

Bit 7: 0: Metin UTF-8 1 olarak kodlanmıştır: Metin içinde kodlanmıştır UTF16

Bit 6: IANA dil kodunun uzunluğu: Kullanıma hazır

Bit 5..0 (sıfır olarak ayarlanmış olmalıdır). Dile kodunun uzunluğu kontrol byte verilmiştir RFC 3066. tanımlanan

Bu US-ASCII saklanır, dil koduyla (tr sizin durumunuzda) izlemektedir.

Ve bunu, denetim baytının bit 7'si tarafından belirtilen biçimde metin takip eder.

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

+1

Nils Merhaba, şimdi ben doğru yük verilerini okumak için biliyorum, Cevabınız için bu bağlantıyı teşekkür ederim http : //code.google.com/p/openmobster/wiki/NFC bunu nasıl yapacağınızı gösterir. ;) –

+1

Ayrıca, burada NDEF Metin Kayıt Türü tanımıdır, bu others..http yardımcı olur umarım: //www.maintag.fr/fichiers/pdf-fr/nfcforum-ts-rtd-text-1-0.pdf –

+0

Bir dahaki sefere, kopyalama ve bağlama daha Cevabınız içine değerleri yerine yapıştırın. Her iki bağlantı da öldü! – nemicolopterus