2011-10-27 6 views
8

Android NFC로 코딩을 시작한 순간, NDEF 데이터를 mifare classic 태그에 성공적으로 읽고 쓴 것입니다. 문제는 응용 프로그램이 ndef 레코드에서 페이로드를 읽을 때 텍스트의 시작 부분에 항상 '* en'문자가 포함되어있는 경우입니다. 나는 그것이 언어 문자라고 생각하지만 그 문자없이 실제 텍스트 메시지를 얻는 방법은 무엇입니까? Android NDEF 레코드 페이로드의 이상한 캐릭터

태그에서 읽은 것을 응용 프로그램의 스크린 샷은 실제 텍스트는 '안녕하세요'는 여기에

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'가 표시됩니다. 문제를 발견했습니다. Nils Pipenbrik이 아래에서 설명합니다. 이 링크 http://code.google.com/p/openmobster/wiki/NFC는 페이로드 데이터를 올바르게 읽는 방법을 보여줍니다. –

답변

14

을 읽을 수있다이다 NDef 텍스트 레코드의 데이터가 UTF8로 변환됩니다.

첫번째 바이트 :

NDEF 텍스트 - 기록은 다음과 같이 구축 인 제어 바이트

비트 7 : 0 : 텍스트는 UTF-8 (1)에 부호화된다 : 텍스트가 인코딩되어 UTF16

비트 6 : IANA 언어 코드의 길이 : RFU는

5..0 비트 (0으로 설정 함).

다음은 RFC 3066에 정의 된대로 US-ASCII (귀하의 경우)로 저장되는 언어 코드입니다. 언어 코드의 길이는 제어 바이트로 제공됩니다.

이 다음에 제어 바이트의 비트 7에 지정된 형식의 텍스트가옵니다.

빈 정사각형 문자는 원시 데이터를 UTF-8로 변환 한 것입니다. 귀하의 경우에 제어 바이트가 숫자 값 2를 가지고 있음을 거의 확신합니다.이 숫자 값에 인쇄 가능한 문자가 없으므로 유니 코드 세트의 인쇄 할 수없는 자리 표시 자 문자로 바뀝니다. 이것은 보통 빈 사각형으로 표시됩니다.

+1

안녕 Nils, 답변을 주셔서 감사합니다, 이제 페이로드 데이터를 올바르게 읽는 방법을 알고,이 링크 http를 사용하여 NdefMessage 구문 분석을 시도하십시오 : //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