Kodowanie i krzaki - wartości testowe
Tekst, który przeszedł przez złe kodowanie i już z niego nie wrócił. 11 wartości, każda z tym, co psuje, i z tym, co zamiast tego robi poprawna aplikacja.
Wpisuj je po jednej skrótem AltShiftN
w palecie albo weź wszystkie do skryptu poleceniem nkb emit encoding-mojibake.
Tekst zakodowany dwa razy
encoding-mojibake/double-encoded
Żółć
Żółć
- 8 grafemów
- 8 punktów kodowych
- 18 bajtów
- 8 jednostek UTF-16
- Co psuje
- Tekst zakodowany dwa razy wyświetla się jako bełkot, a zapisanego w tym stanie nie da się już przywrócić do oryginału.
- Co robi poprawna aplikacja
- Nigdy niewytwarzany, a jeśli przyjdzie z zewnątrz, zapisany dosłownie, a nie „naprawiany” zgadywaniem.
Znacznik kolejności bajtów przed imieniem
encoding-mojibake/bom-leading
Jan
\uFEFFJan
- 1 znak o zerowej szerokości
- 4 grafemy
- 4 punkty kodowe
- 6 bajtów
- 4 jednostki UTF-16
- Co psuje
- Znacznik kolejności bajtów na początku wartości psuje dokładne porównanie i ustawia rekord przed wszystkimi innymi.
- Co robi poprawna aplikacja
- Usuwany przy wprowadzaniu, konsekwentnie w każdej warstwie, która czyta pliki.
Znak zastępczy w imieniu i nazwisku
encoding-mojibake/replacement-char
Jan�Kowalski
Jan�Kowalski
- 12 grafemów
- 12 punktów kodowych
- 14 bajtów
- 12 jednostek UTF-16
- Co psuje
- Znak, który pojawia się tam, gdzie dekodowanie już zawiodło. Jego obecność znaczy, że dane zginęły wcześniej.
- Co robi poprawna aplikacja
- Wykryty i zgłoszony, a nie zapisany jak zwykły tekst.
Znaki zapytania zamiast utraconych liter
encoding-mojibake/question-mark-fallback
Jan????????
Jan ????????
- 12 grafemów
- 12 punktów kodowych
- 12 bajtów
- 12 jednostek UTF-16
- Co psuje
- To, co wąskie kodowania wstawiają zamiast znaków, których nie umieją zapisać. Nie do odróżnienia od znaków zapytania wpisanych przez użytkownika.
- Co robi poprawna aplikacja
- Nigdy niewytwarzane: pełny zestaw znaków obsługiwany od początku do końca.
Litera z akcentem na końcu
encoding-mojibake/latin1-tail
café
café
- 4 grafemy
- 4 punkty kodowe
- 5 bajtów
- 4 jednostki UTF-16
- Co psuje
- Popularne słowo z akcentem, które przetrwa albo się zepsuje, zależnie od kodowania każdej warstwy, przez którą przechodzi.
- Co robi poprawna aplikacja
- Identyczne przed zapisem i po ponownym wczytaniu.
Litery z regionalnych kodowań
encoding-mojibake/cp-specific-letters
źżćńó
źżćńó
- 5 grafemów
- 5 punktów kodowych
- 10 bajtów
- 5 jednostek UTF-16
- Co psuje
- Litery obecne w regionalnych kodowaniach i nieobecne w innych. Pierwsze, co psuje się w eksporcie.
- Co robi poprawna aplikacja
- Zachowane w eksportach, wydrukach i nazwach plików.
Jedna cyrylicka litera w łacińskim nazwisku
encoding-mojibake/mixed-scripts
JanКowalski
Jan Кowalski
- 12 grafemów
- 12 punktów kodowych
- 13 bajtów
- 12 jednostek UTF-16
- Co psuje
- Jedna cyrylicka litera w łacińskim słowie. Wartość wygląda poprawnie i nigdy nie pasuje do wyszukiwania.
- Co robi poprawna aplikacja
- Albo normalizowana, albo oznaczona, a nie po cichu przyjęta jako identyczna.
Emoji, ideogram i arabski naraz
encoding-mojibake/high-codepoint
😀中ال
😀中ال
- 4 grafemy
- 4 punkty kodowe
- 11 bajtów
- 5 jednostek UTF-16
- Co psuje
- Emoji, ideogram i arabska litera w jednej wartości: trzy różne założenia o zapisie naraz.
- Co robi poprawna aplikacja
- Zapisane i zwrócone bez zmian.
Spacja ideograficzna w imieniu i nazwisku
encoding-mojibake/overlong-space
JanKowalski
Jan\u3000Kowalski
- 1 spacja, która nie jest zwykłą spacją
- 12 grafemów
- 12 punktów kodowych
- 14 bajtów
- 12 jednostek UTF-16
- Co psuje
- Spacja ideograficzna: prawdziwy znak odstępu, o którym większość funkcji przycinających nie wie.
- Co robi poprawna aplikacja
- Przycinana jak każdy inny biały znak albo konsekwentnie zachowywana.
Litera z pięcioma akcentami łączącymi
encoding-mojibake/combining-overflow
á́́́́
á́́́́
- 1 grafem
- 6 punktów kodowych
- 11 bajtów
- 6 jednostek UTF-16
- Co psuje
- Wiele znaków łączących na jednej literze: normalizacja i limity długości nie zgadzają się, ile to jest znaków.
- Co robi poprawna aplikacja
- Liczona konsekwentnie i rysowana bez zasłaniania sąsiednich elementów interfejsu.
Każda ryzykowna klasa w jednej wartości
encoding-mojibake/roundtrip-check
Żółć😀中ą
Żółć 😀 中 ą
- 10 grafemów
- 10 punktów kodowych
- 20 bajtów
- 11 jednostek UTF-16
- Co psuje
- Jedna wartość łącząca każdą ryzykowną klasę znaków, do szybkiej próby zapisu i ponownego wczytania.
- Co robi poprawna aplikacja
- Zwrócona bajt w bajt identyczna po pełnym obiegu.