네 가지 주요 모드
각 모드는 표현할 수 있는 글자 범위와 밀도를 맞바꿔요. 숫자 모드는 숫자만 다루지만 세 자리를 10비트에 담고, 바이트 모드는 어떤 바이트든 다루지만 하나에 8비트를 써요.
영숫자 모드는 45자 집합을 다뤄요. 숫자 0–9, 대문자 A–Z, 공백, 기호 $ % * + - . / 와 콜론이에요. 소문자는 이 집합에 없기 때문에, 전체를 대문자로 쓴 URL이 소문자 URL보다 더 작은 코드가 될 수 있어요.
- 숫자: 숫자 0–9, 3자리에 10비트
- 영숫자: 45자, 2자에 11비트
- 바이트: 모든 8비트 값, 바이트당 8비트
- 한자: Shift JIS 2바이트 문자, 각 13비트
모드 지시자와 세그먼트
데이터의 각 구간은 4비트 모드 지시자와 글자 수로 시작하고, 글자 수의 길이는 모드와 버전에 따라 달라요. 코드에는 이런 세그먼트가 여러 개 들어갈 수 있어요. 예를 들어 긴 숫자 구간은 숫자 모드로, 나머지는 바이트 모드로 쓰면 결과가 더 작아질 수 있어요.
다른 4비트 지시자는 문자 집합이 아니라 기능을 알려요. 문자 인코딩을 선언하는 ECI, 데이터를 여러 코드로 나누는 구조적 추가, GS1 및 기타 업계 데이터 형식용 FNC1이 있어요. 0 네 개로 된 종료 표시가 데이터를 끝내요.
- 숫자 0001, 영숫자 0010, 바이트 0100, 한자 1000
- ECI 0111, 구조적 추가 0011
- FNC1 첫째 위치 0101, 둘째 위치 1001
- 종료 표시 0000
바이트 모드와 문자 집합
바이트 모드에 대한 표준의 기본 해석은 ISO-8859-1(Latin-1)이지만, 요즘 대부분의 생성기는 악센트 문자, 다른 문자 체계, 이모지가 유지되도록 UTF-8로 써요. 리더는 보통 바이트를 살펴서 UTF-8을 알아내요.
문자 집합이 분명해야 하는 곳에서는 ECI 헤더로 명시적으로 선언할 수 있어요. 없으면 리더가 가끔 잘못 짐작해서 글자가 깨져 보일 수 있어요.