2011-10-27 14 views
8

Android NFCでコーディングを開始しました。私は正常にmifare classicタグにNDEFデータを読み書きしました。問題は、アプリケーションがペイロードをndefレコードから読み込み、テキストの先頭に常に '* en'という文字が含まれていることです。私はそれが言語文字だと思うが、その文字なしで実際のテキストメッセージを取得する方法は?Android NDEFレコードのペイロードに奇妙な文字

これはタグから読み取っ何のアプリのスクリーンショットで、実際のテキストは「Hello Worldの」

enter image description here でここにあなたが見ている何

@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

"en"は "英語"に由来すると思います。私はあなたが間違いなく言語コードを追加したと思います。 XMLの言語タグを変更すると、別の文字シーケンスが表示されることがあります。これを試してください。少なくとも、あなたはどこから来ているのかわかりますし、googleで解決策を探すことができます。 –

+0

タグを書き込むコードを投稿することができれば役に立ちます。他の誰かのアプリを使ってあなたのタグを読んでタグの書き方が分かっているのか、読んでいるのか分かりましたか? (Ndefメッセージにあるのと同じ情報が表示されている場合は書き込みに問題があり、 "Hello World ..."と表示されている場合は読み込みの問題です) –

+0

Lajos、Ben ...あなたのコメントありがとう私は他のアプリ、NFCのタグ情報を使ってみましたが、アプリは 'Hello World'.Btwを表示しました.Nils Pipenbrikが以下で説明するように問題を発見しました。このリンクhttp://code.google.com/p/openmobster/wiki/NFCでは、ペイロードデータを正しく読み取る方法が示されています。 –

答えて

14

を読むためのコードが生ですUTF8に変換されたNDefテキストレコードのデータ。

NDEFテキストレコードは次のように構築さ:

まずバイト:コントロールバイト

ビット7:0:テキストはUTF-8 1でエンコードされたテキストがでエンコードされ UTF16

ビット6:RFU(ゼロに設定しなければならない)

ビット5..0:IANA言語コードの長さ。

これに続いて、RFC 3066で定義されているUS-ASCII(あなたの場合はen)に格納されている言語コードが続きます。言語コードの長さは、制御バイトで与えられます。

この後に、制御バイトのビット7で指定された形式のテキストが続きます。

空の四角い文字は、生データをUTF-8に変換したものです。私はあなたのケースの制御バイトに数値2があることをほとんど確信しています。この数値には印刷可能な文字がないので、unicode-setから印刷できないプレースホルダ文字に置き換えられます。これは通常、空の四角で表示されます。

+1

を使用してNdefMessageを解析してみてください。こんにちはNilsさん、あなたの答えをありがとう、今私はペイロードデータを正しく読み取る方法を知っています、このリンクhttp ://code.google.com/p/openmobster/wiki/NFCにその方法を示します。 ;) –

+1

また、NDEFのテキストレコードタイプの定義は、他人に役立つことを願っています.http://www.maintag.fr/fichiers/pdf-fr/nfcforum-ts-rtd-text-1-0.pdf –

+0

次回は、リンクするのではなく、答えに値をコピーして貼り付けてください。両方のリンクが死んでいる! – nemicolopterus