NDEF 레코드에서 Text 레코드 타입의 정의입니다. 즉 NDEF Record가 Text 일때의 포맷입니다.
NDEF Message에 관한 전반적인 내용은 아래 링크된 글에서 참조 하시기 바랍니다.
☞NFC Data Exchange Format
1. NDEF Text Record
PAYLOAD의 레이아웃입니다. 표에서의 각 한칸은 1bit를 의미합니다.
1) UTF - Text encoding
UTF 필드는 실제 텍스트 정보의 인코딩입니다.
UTF 값이 0이면 UTF-8 인코딩, 1인 경우 UTF-16 입니다.
2) RFU
RFU 필드는 Reserver for Future Use의 준말로써 아직 사용하지 않는 필드이며 예약된 필드 영역입니다. 이 값은 현재는 무조건 0으로 주시면 됩니다.
3) Language Code Length
텍스트 정보의 언어 코드 정보를 표현하는 필드의 길이입니다.
이 필드의 값에 따라 2번째 바이트에 위치한 Language Code 필드의 바이트 수가 정해집니다. Language code length의 값이 3 (2진수 000011) 인 경우 아래쪽 Language code 의 바이트 수(비트가 아닙니다 - 표에서의 한줄이 1byte 입니다.)는 3개가 되겠죠. 아래쪽에서 예제로 다시 설명하겠습니다.
4) Language code
텍스트 정보의 언어 코드 정보입니다. RFC 3066에 IATA의 형식으로 표기하시면 되고 인코딩은 US-ASCII입니다.
RFC 3066의 정보를 깔끔하게 정리해놓은 사이트가 있어 링크 걸어둡니다.
Using Language Identifier
5) Actual text body
실제 텍스트 정보가 들어가는 부분입니다. 텍스트의 길이에 따라서 복수의 byte를 가질 수 있습니다.
2. 간단한 예제
"안녕하세요 NFC 텍스트 레코드입니다." 라는 정보를 담는 텍스트 레코드를 만들어보는 예제입니다. NDEF Message의 헤더부분은 따로 쓰지 않겠습니다.
UTF-8로 인코딩하고 IATA 언어 코드는 "ko-KR"입니다.
따라서 UTF 필드는 0
RFU필드는 자동적으로 0 (사용하지 않는 필드이므로)
언어 코드의 길이(Language code length)는 ko-KR 이므로 십진수로 5이고 이진수로는 여섯 비트에 걸쳐 0 0 0 1 0 1 입니다.
언어코드는 "ko-KR"(한글)을 사용하므로 이를 아스키값으로 표현하면
0x6b, 0x6f, 0x2d, 0x4b, 0x52 입니다. 즉 표에서보면 5줄로 표현되며 각 줄에 위의 값이 표시됩니다.
실제 텍스트 부분입니다. UTF-8로 인코딩하여 byte값을 얻어보면
0xec 0x95 0x88 0xeb 0x85
0x95 0xed 0x95 0x98 0xec
0x84 0xb8 0xec 0x9a 0x94
0x20 0x4e 0x46 0x43 0x20
0xed 0x85 0x8d 0xec 0x8a
0xa4 0xed 0x8a 0xb8 0x20
0xeb 0xa0 0x88 0xec 0xbd
0x94 0xeb 0x93 0x9c 0xec
0x9e 0x85 0xeb 0x8b 0x88
0xeb 0x8b 0xa4 0x2e
네.. 좀 기네요 길이는 49입니다. 그럼 Actual text body는 총 49바이트 (표에서 49줄)의 정보를 가지게 되고 각 줄에 위의 바이트 값들을 가지게 되겠죠
여기서 혹시나 알아채신 분이 있다면 실제 텍스트의 길이는 어떻게 구하느냐 인데. 이 글에서 표현하는 정보는 Payload에 국한되어있습니다. Payload의 길이는 자기자신이 가진게 아니라 Message에서 가지고 있으므로 Message에서 가진 Payload의 길이에서 Actual text body 부분을 제외한 바이트 수를 빼면 Actual text body의 길이가 됩니다.
[참고자료]
NFC Forum Text Record Type Definition
NDEF Message에 관한 전반적인 내용은 아래 링크된 글에서 참조 하시기 바랍니다.
☞NFC Data Exchange Format
1. NDEF Text Record
PAYLOAD의 레이아웃입니다. 표에서의 각 한칸은 1bit를 의미합니다.
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
UTF | RFU | Language code length | |||||
Language code (US-ASCII) | |||||||
Actual text body |
1) UTF - Text encoding
UTF 필드는 실제 텍스트 정보의 인코딩입니다.
UTF 값이 0이면 UTF-8 인코딩, 1인 경우 UTF-16 입니다.
2) RFU
RFU 필드는 Reserver for Future Use의 준말로써 아직 사용하지 않는 필드이며 예약된 필드 영역입니다. 이 값은 현재는 무조건 0으로 주시면 됩니다.
3) Language Code Length
텍스트 정보의 언어 코드 정보를 표현하는 필드의 길이입니다.
이 필드의 값에 따라 2번째 바이트에 위치한 Language Code 필드의 바이트 수가 정해집니다. Language code length의 값이 3 (2진수 000011) 인 경우 아래쪽 Language code 의 바이트 수(비트가 아닙니다 - 표에서의 한줄이 1byte 입니다.)는 3개가 되겠죠. 아래쪽에서 예제로 다시 설명하겠습니다.
4) Language code
텍스트 정보의 언어 코드 정보입니다. RFC 3066에 IATA의 형식으로 표기하시면 되고 인코딩은 US-ASCII입니다.
RFC 3066의 정보를 깔끔하게 정리해놓은 사이트가 있어 링크 걸어둡니다.
Using Language Identifier
5) Actual text body
실제 텍스트 정보가 들어가는 부분입니다. 텍스트의 길이에 따라서 복수의 byte를 가질 수 있습니다.
2. 간단한 예제
"안녕하세요 NFC 텍스트 레코드입니다." 라는 정보를 담는 텍스트 레코드를 만들어보는 예제입니다. NDEF Message의 헤더부분은 따로 쓰지 않겠습니다.
UTF-8로 인코딩하고 IATA 언어 코드는 "ko-KR"입니다.
따라서 UTF 필드는 0
RFU필드는 자동적으로 0 (사용하지 않는 필드이므로)
언어 코드의 길이(Language code length)는 ko-KR 이므로 십진수로 5이고 이진수로는 여섯 비트에 걸쳐 0 0 0 1 0 1 입니다.
언어코드는 "ko-KR"(한글)을 사용하므로 이를 아스키값으로 표현하면
0x6b, 0x6f, 0x2d, 0x4b, 0x52 입니다. 즉 표에서보면 5줄로 표현되며 각 줄에 위의 값이 표시됩니다.
실제 텍스트 부분입니다. UTF-8로 인코딩하여 byte값을 얻어보면
0xec 0x95 0x88 0xeb 0x85
0x95 0xed 0x95 0x98 0xec
0x84 0xb8 0xec 0x9a 0x94
0x20 0x4e 0x46 0x43 0x20
0xed 0x85 0x8d 0xec 0x8a
0xa4 0xed 0x8a 0xb8 0x20
0xeb 0xa0 0x88 0xec 0xbd
0x94 0xeb 0x93 0x9c 0xec
0x9e 0x85 0xeb 0x8b 0x88
0xeb 0x8b 0xa4 0x2e
네.. 좀 기네요 길이는 49입니다. 그럼 Actual text body는 총 49바이트 (표에서 49줄)의 정보를 가지게 되고 각 줄에 위의 바이트 값들을 가지게 되겠죠
여기서 혹시나 알아채신 분이 있다면 실제 텍스트의 길이는 어떻게 구하느냐 인데. 이 글에서 표현하는 정보는 Payload에 국한되어있습니다. Payload의 길이는 자기자신이 가진게 아니라 Message에서 가지고 있으므로 Message에서 가진 Payload의 길이에서 Actual text body 부분을 제외한 바이트 수를 빼면 Actual text body의 길이가 됩니다.
[결과]
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 |
Language code (US-ASCII encoding ) : "ko-KR" to bytes | |||||||
0x6 | |||||||
0x6f | |||||||
0x2d | |||||||
0x4b | |||||||
0x52 | |||||||
Actual text body contents : "안녕하세요 NFC 텍스트 레코드입니다." to bytes | |||||||
0xec | |||||||
0x95 | |||||||
0x88 | |||||||
0xeb | |||||||
0x85 | |||||||
0x95 | |||||||
0xed | |||||||
0x95 | |||||||
0x98 | |||||||
0xec | |||||||
0x84 | |||||||
0xb8 | |||||||
0xec | |||||||
0x9a | |||||||
0x94 | |||||||
0x20 | |||||||
0x4e | |||||||
0x46 | |||||||
0x43 | |||||||
0x20 | |||||||
0xed | |||||||
0x85 | |||||||
0x8d | |||||||
0xec | |||||||
0x8a | |||||||
0xa4 | |||||||
0xed | |||||||
0x8a | |||||||
0xb8 | |||||||
0x20 | |||||||
0xeb | |||||||
0xa0 | |||||||
0x88 | |||||||
0xec | |||||||
0xbd | |||||||
0x94 | |||||||
0xeb | |||||||
0x93 | |||||||
0x9c | |||||||
0xec | |||||||
0x9e | |||||||
0x85 | |||||||
0xeb | |||||||
0x8b | |||||||
0x88 | |||||||
0xeb | |||||||
0x8b | |||||||
0xa4 | |||||||
0x2e |
[참고자료]
NFC Forum Text Record Type Definition
'밤을 지새다 > Android' 카테고리의 다른 글
XML 레이아웃 코드 재사용성 높이기 (0) | 2012.05.30 |
---|---|
액티비티 시작 후 키보드 감추기 (1) | 2012.04.10 |
DIP to Pixel, Pixel to DIP (0) | 2012.04.10 |
[NFC] NDEF 메시지를 읽는 액티비티 만들기 - 작성 중 (0) | 2011.08.16 |
NFC Data Exchange Format - 작성 중 (0) | 2011.08.14 |