質問: msgs[0]; try { mText.setText(new String(msg.getRecords()[0].getPayload(), "UTF-8")); } catch (Exception e) { e.printStackTrace(); } } } } ```
回答: あなたが見ているのは、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から印刷できないプレースホルダ文字に置き換えられます。これは通常、空の四角で表示されます。