Jedno z moich wymagań mówi: "Nazwa pola tekstowego powinna akceptować tylko zestaw znaków UTF-8". Chcę przeprowadzić negatywny test, wprowadzając zestaw znaków inny niż UTF-8. Jak mogę to zrobić?Jak wygenerować zestaw znaków inny niż UTF-8?
Odpowiedz
Jeśli proszą jak skonstruować niż UTF-8 znaków, które powinny być łatwe od this definition from Wikipedia:
Dla punktów kodowych U + 0000 do U + 007F, każdy punkt kodowy jest jednym bajt długości i wygląda następująco:
0xxxxxxx // a
Dla punktów kodowych U + 0080 do U + 07FF, każdy punkt kodowy jest długi dwa bajty i wyglądać tak:
110xxxxx 10xxxxxx // b
I tak dalej.
Tak więc, aby skonstruować niedozwolony znak UTF-8, który ma jeden bajt, najwyższy bit musi wynosić 1 (aby być różny od wzorca a), a drugi najwyższy bit musi być równy 0 (aby być różny od wzorca b) :
10xxxxxx
lub
111xxxxx
który różni się też od obu wzorów.
Przy użyciu tej samej logiki można skonstruować niedozwolone sekwencje kodu, które mają więcej niż dwa bajty.
Nie oznacz język, ale musiałem go przetestować, więc użyłem Java:
for (int i=0;i<255;i++) {
System.out.println(
i + " " +
(byte)i + " " +
Integer.toHexString(i) + " " +
String.format("%8s", Integer.toBinaryString(i)).replace(' ', '0') + " " +
new String(new byte[]{(byte)i},"UTF-8")
);
}
0 do 31 są znaki niedrukowalne, następnie 32 jest przestrzeń, a następnie druku znaków:
...
31 31 1f 00011111
32 32 20 00100000
33 33 21 00100001 !
...
126 126 7e 01111110 ~
127 127 7f 01111111
128 -128 80 10000000 �
delete
to 0x7f
i po nim, od 128 włącznie do 254 nie są drukowane prawidłowe znaki. Można zobaczyć z UTF-8 chartable także:
kodowy U+007F
jest reprezentowany przez jeden bajt 0x7F
(bity 01111111
), natomiast punkt kodowy U+0080
jest reprezentowana przez dwa bajty 0xC2 0x80
(bitów 11000010 10000000
).
Jeśli nie są zaznajomieni z UTF-8 gorąco polecam czytanie tego doskonały artykuł:
- 1. Jak ustawić zestaw znaków mongodb na utf8?
- 2. Ustawianie reCAPTCHA wersja 2 zestaw inny język inny niż angielski
- 3. jak ustawić domyślny zestaw znaków?
- 4. Jak powtórzyć zestaw znaków
- 5. PHP preg_split utf8 znaków
- 6. UTF8 bajt [] do konwersji ciągów znaków
- 7. error: Nieznany zestaw znaków: 'utf8_unicode_ci'
- 8. Unikaj zestaw znaków w znaczniku meta i określ zestaw znaków
- 9. MySQL - Konwersja znaków latin1 na stole UTF8 w UTF8
- 10. Przykład nieprawidłowy ciąg znaków utf8?
- 11. Jak zmienić domyślny zestaw znaków tabeli MySQL?
- 12. Utwórz nieprawidłowy ciąg znaków UTF8?
- 13. Jak wykryć, czy zestaw zestawów zawiera inny zestaw?
- 14. ListAdapter Filtr inny niż za pomocą ciągów znaków?
- 15. Jak mogę usunąć znaki, które nie są obsługiwane przez zestaw znaków utf8 MySQL?
- 16. Jak zmienić zestaw znaków ajax?
- 17. zestaw znaków między PHP i MySQL
- 18. Zestaw znaków, który nie jest nadzbiorem ASCII
- 19. W Perlu, w jaki sposób mogę zamienić zestaw znaków na inny zestaw znaków w pojedynczym przejściu? Biorąc
- 20. Jak ustawić zestaw znaków do konkretnej kolumny podczas migracji Yii2
- 21. Django zestaw znaków z MySQL niesamowitość
- 22. zestaw zestawów znaków w szynach
- 23. Wykrywanie utf8 zepsutych znaków w MySQL
- 24. Regex do usuwania znaków niealfanumerycznych ze znaków UTF8
- 25. Firebird domyślny zestaw znaków
- 26. Ember.js {{action}} inny niż kliknij
- 27. Czy istnieją znaki ograniczające dla znaków UTF8?
- 28. NumPy/OpenCV 2: jak przycinać region inny niż prostokątny?
- 29. Swift: wygenerować tablicę (SWIFT) znaków
- 30. Jak sprawdzić zestaw znaków w Java?
Via UI będzie mieć twardy czas to robi. Będziesz musiał jakoś to zrobić programowo. – leppie
Zacznij od zdefiniowania * języka programowania *, środowiska i/lub kontekstu. Będzie to bardzo różne w zależności od systemu, w którym pracujesz z/na/w. – deceze
dlaczego DOWNVOTE na to pytanie? – swapneel