Tryby kodowania

Inne nazwy: tryby danych, tryb numeryczny, tryb alfanumeryczny, tryb bajtowy, tryb kanji

Definicja

Tryby kodowania to sposoby, w jakie kod QR upakowuje znaki w bity. Cztery główne tryby to numeryczny, alfanumeryczny, bajtowy i kanji, a jeden kod może się między nimi przełączać.

Cztery główne tryby

Każdy tryb wymienia zakres znaków na gęstość zapisu. Tryb numeryczny obsługuje tylko cyfry, ale upakowuje po trzy z nich w 10 bitach, a tryb bajtowy obsługuje dowolny bajt, ale na każdy wydaje 8 bitów.

Tryb alfanumeryczny obejmuje zestaw 45 znaków: cyfry 0–9, wielkie litery A–Z, spację oraz symbole $ % * + - . / i dwukropek. Małych liter w tym zestawie nie ma, dlatego adres URL zapisany samymi wielkimi literami może dać mniejszy kod niż ten sam adres małymi literami.

  • Numeryczny: cyfry 0–9, 10 bitów na 3 cyfry
  • Alfanumeryczny: 45 znaków, 11 bitów na 2 znaki
  • Bajtowy: dowolna wartość 8-bitowa, 8 bitów na bajt
  • Kanji: dwubajtowe znaki Shift JIS, po 13 bitów każdy

Wskaźniki trybu i segmenty

Każdy ciąg danych zaczyna się od 4-bitowego wskaźnika trybu i licznika znaków, którego długość zależy od trybu i wersji. Kod może zawierać kilka takich segmentów, na przykład numeryczny dla długiego ciągu cyfr i bajtowy dla reszty, co może zmniejszyć wynik.

Inne 4-bitowe wskaźniki sygnalizują funkcje, a nie zestawy znaków: ECI do deklarowania kodowania znaków, structured append do dzielenia danych na kilka kodów i FNC1 dla GS1 oraz innych branżowych formatów danych. Terminator z czterech zerowych bitów kończy dane.

  • Numeryczny 0001, alfanumeryczny 0010, bajtowy 0100, kanji 1000
  • ECI 0111, structured append 0011
  • FNC1 na pierwszej pozycji 0101, na drugiej 1001
  • Terminator 0000

Tryb bajtowy i zestawy znaków

Domyślną interpretacją trybu bajtowego w normie jest ISO-8859-1 (Latin-1), ale większość dzisiejszych generatorów zapisuje UTF-8, żeby przetrwały litery z akcentami, inne pisma i emoji. Czytniki zwykle rozpoznają UTF-8, analizując bajty.

Tam, gdzie zestaw znaków musi być jednoznaczny, nagłówek ECI może zadeklarować go wprost. Bez niego czytnik może czasem zgadnąć błędnie i pokazać zniekształcone znaki.

Najczęstsze pytania

Dlaczego mój kod QR jest większy z małymi literami?

Małych liter nie ma w zestawie alfanumerycznym, więc tekst musi użyć trybu bajtowego z 8 bitami na znak zamiast 5,5. Wielkie litery, cyfry i kilka symboli upakowują się ciaśniej.

Czy kod QR może przechowywać emoji lub tekst w niełacińskich pismach?

Tak, w trybie bajtowym z użyciem UTF-8, które obsługuje większość generatorów i czytników w telefonach. Każdy taki znak zajmuje kilka bajtów, więc pojemność spada.

Czy jeden kod QR może mieszać dane numeryczne i tekstowe?

Tak. Dane można podzielić na segmenty, każdy z własnym trybem, a dobre kodery wybierają podział, który daje najmniejszy kod.

Źródła i normy

Wszystkie hasła