Android NDEFレコードのペイロードに奇妙な文字があります

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

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

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
「en」は「英語」から来ていると思います。私はあなたが間違いなく言語コードを追加したと思います。 XMLの言語タグを変更すると、別の文字シーケンスが表示されることがあります。これを試してください。少なくとも、あなたはどこから来ているのかわかりますし、googleで解決策を探すことができます。
追加された 著者 Lajos Arpad,
Lajos、Ben ...あなたのコメントのおかげで、他のアプリ、NFCのタグ情報を使ってみました。アプリは「Hello World」を表示します.Nils Pipenbrikが以下で説明するように、問題を発見しました。このリンクは code.google.com/p/openmobster/wiki/NFC に表示されますペイロードデータを正しく読み取る方法。
追加された 著者 Lorensius W. L. T,
タグを書き込むコードを投稿することができれば、参考になるでしょう。他の誰かのアプリを使ってあなたのタグを読んでタグの書き方が分かっているのか、読んでいるのか分かりましたか? (Ndefメッセージにあるのと同じ情報が表示されている場合は書き込みに問題があり、 "Hello World ..."と表示されている場合は読み込み問題です)。
追加された 著者 Ben Ward,

1 答え

あなたが見ているのは、NDefテキストレコードの生データがUTF8に変換されたことです。

NDefテキストレコードは次のように構築されています:

最初のバイト:Control-Byte

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

     

ビット6:RFU(ゼロに設定する必要があります)

     

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

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

そして、これに続いて、制御バイトのビット7で指定されたフォーマットのテキストが続きます。

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

14
追加された
こんにちはNils、あなたの答えをありがとう、今私はペイロードデータを正しく読み取る方法を知って、このリンク code.google.com/p/openmobster/wiki/NFC にその方法を示します。 ;)
追加された 著者 Lorensius W. L. T,
また、ここにはNDEFのテキストレコードタイプの定義があり、他の人に役立つことを願っています。 maintag.fr/fichiers/pdf-fr/nfcforum-ts-rtd-text-1-0.‌ pdf
追加された 著者 Lorensius W. L. T,
次回は、リンクするのではなく、答えに値をコピーして貼り付けてください。両方のリンクが死んでいる!
追加された 著者 nemicolopterus,