Unicode i tekst - wartości testowe
Znaki, które wyglądają niewinnie, a psują liczenie, porównywanie i wyświetlanie. 12 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 unicode-text.
Wymuszenie kierunku od prawej do lewej
unicode-text/rtl-override
raporttxt.exe
raport\u202Etxt.exe
- 1 znak, który zmienia kierunek tekstu
- 14 grafemów
- 14 punktów kodowych
- 16 bajtów
- 14 jednostek UTF-16
- Co psuje
- Znak wymuszający kierunek sprawia, że tekst wyświetla się odwrócony: użytkownik widzi inną wartość niż zapisana.
- Co robi poprawna aplikacja
- Usunięte, escapowane albo pokazane ze zneutralizowanym działaniem - nigdy nie wyświetlane tak, jak jest.
Miękki łącznik
unicode-text/soft-hyphen
Kowalski
Kowal\u00ADski
- 1 miękki łącznik
- 9 grafemów
- 9 punktów kodowych
- 10 bajtów
- 9 jednostek UTF-16
- Co psuje
- Niewidoczny łącznik w środku słowa psuje dokładne wyszukiwanie i sprawia, że dwa identycznie wyglądające nazwiska są różnymi rekordami.
- Co robi poprawna aplikacja
- Zapisany bez zmian i znajdowany przez wyszukiwanie słowa Kowalski albo usuwany przez normalizację przy zapisie.
Łączący akcent ostry
unicode-text/combining-acute
é
é
- 1 grafem
- 2 punkty kodowe
- 3 bajty
- 2 jednostki UTF-16
- Co psuje
- Ta sama litera zapisana jako litera bazowa ze znakiem łączącym porównuje się jako różna od postaci jednoznakowej.
- Co robi poprawna aplikacja
- Normalizowany przy zapisie albo porównywany z uwzględnieniem normalizacji.
Spiętrzone znaki łączące
unicode-text/zalgo
è́̂̃̄̅̆̇̈̉
è́̂̃̄̅̆̇̈̉
- 1 grafem
- 11 punktów kodowych
- 21 bajtów
- 11 jednostek UTF-16
- Co psuje
- Spiętrzone znaki łączące wychodzą w pionie poza wiersz i zasłaniają interfejs wokół pola.
- Co robi poprawna aplikacja
- Przyjęte i przycięte do ramki pola albo odrzucone z limitem znaków łączących.
Znacznik kolejności bajtów w wartości
unicode-text/bom-inside
JanKowalski
Jan\uFEFFKowalski
- 1 znak o zerowej szerokości
- 12 grafemów
- 12 punktów kodowych
- 14 bajtów
- 12 jednostek UTF-16
- Co psuje
- Znacznik kolejności bajtów w środku wartości przeżywa każde kopiowanie i po cichu psuje dokładne porównanie.
- Co robi poprawna aplikacja
- Usuwany przy zapisie albo zachowany i widoczny w interfejsie.
Znak sterujący dzwonka
unicode-text/bell-control
JanKowalski
Jan\u0007Kowalski
- 1 inny znak sterujący
- 12 grafemów
- 12 punktów kodowych
- 12 bajtów
- 12 jednostek UTF-16
- Co psuje
- Znak sterujący przekazany do terminala albo logu sprawia, że wyjście coś robi, zamiast coś mówić.
- Co robi poprawna aplikacja
- Odrzucony albo escapowany, zanim trafi do jakiegokolwiek logu, terminala albo raportu.
Litery łacińskie pełnej szerokości
unicode-text/fullwidth-latin
fullwidth
fullwidth
- 9 grafemów
- 9 punktów kodowych
- 27 bajtów
- 9 jednostek UTF-16
- Co psuje
- Człowiek czyta litery pełnej szerokości jak łacińskie, a wyszukiwanie, filtry i kontrola unikalności jak zupełnie inne znaki.
- Co robi poprawna aplikacja
- Normalizowane do porównań albo przyjęte i konsekwentnie traktowane jako różne.
Matematyczne litery pogrubione
unicode-text/math-bold
𝐇𝐞𝐥𝐥𝐨
𝐇𝐞𝐥𝐥𝐨
- 5 grafemów
- 5 punktów kodowych
- 20 bajtów
- 10 jednostek UTF-16
- Co psuje
- Matematyczne warianty liter omijają filtry wulgaryzmów i wyszukiwanie, a wyglądają jak zwykłe słowa.
- Co robi poprawna aplikacja
- Normalizowane do porównań i filtrowania albo odrzucane w polach, w których oczekiwany jest zwykły tekst.
Litery do góry nogami
unicode-text/upside-down
ʇxǝʇ
ʇxǝʇ
- 4 grafemy
- 4 punkty kodowe
- 7 bajtów
- 4 jednostki UTF-16
- Co psuje
- Zwykłe litery z innego bloku Unicode, używane do omijania filtrów i do psucia wyświetlania wierszy na listach.
- Co robi poprawna aplikacja
- Przyjęte jako zwykły tekst bez psucia układu i objęte tymi samymi filtrami co zwykły tekst.
Mieszane znaki CJK
unicode-text/cjk-mixed
名前テスト
名前テスト
- 5 grafemów
- 5 punktów kodowych
- 15 bajtów
- 5 jednostek UTF-16
- Co psuje
- Znaki podwójnej szerokości psują wyrównanie kolumn i mylą liczniki, które zakładają, że jeden znak to jedna komórka.
- Co robi poprawna aplikacja
- Wyświetlane i liczone poprawnie, a szerokości kolumn dopasowują się, zamiast się przelewać.
Arabski w łacińskim zdaniu
unicode-text/arabic-in-latin
JanمرحباKowalski
Jan مرحبا Kowalski
- 18 grafemów
- 18 punktów kodowych
- 23 bajty
- 18 jednostek UTF-16
- Co psuje
- Tekst pisany od prawej do lewej w zdaniu pisanym od lewej do prawej zmienia na ekranie kolejność, więc kolejność na ekranie nie jest kolejnością zapisu.
- Co robi poprawna aplikacja
- Zapisany w kolejności logicznej i wyświetlany z poprawną izolacją, więc kopiowanie zwraca to, co zostało wpisane.
Emoji w polu imienia
unicode-text/emoji-in-name
Jan😀Kowalski
Jan😀Kowalski
- 12 grafemów
- 12 punktów kodowych
- 15 bajtów
- 13 jednostek UTF-16
- Co psuje
- Znak spoza podstawowej płaszczyzny w polu imienia przekracza limity długości w bajtach i psuje bazy danych skonfigurowane na wąskie kodowania.
- Co robi poprawna aplikacja
- Zapisane w całości albo odrzucone z komunikatem - nigdy nie ucięte w połowie znaku.