В одном из моих требований указано, что «Имя текстового поля должно принимать только набор символов UTF-8». Я хочу выполнить отрицательный тест, введя набор символов не UTF-8. Как я могу это сделать?Как создать набор символов, отличных от UTF-8
ответ
Если вы спрашиваете, как построить не-UTF-8 символов, которые должны быть легко от this definition from Wikipedia:
Для кодовых точек U + 0000 через U + 007F, каждый элемент кода является один байт долго и выглядит следующим образом:
0xxxxxxx // a
Для кодовых точек U + 0080 через U + 07FF, каждый элемент кода имеет длину два байта и выглядеть следующим образом:
110xxxxx 10xxxxxx // b
И так далее.
Таким образом, для создания недопустимого символа UTF-8, длина которого равна одному байту, старший бит должен быть 1 (чтобы отличаться от шаблона a), а второй старший бит должен быть 0 (чтобы отличаться от шаблона b) :
10xxxxxx
или
111xxxxx
Который также отличается от обеих моделей.
С помощью той же логики вы можете создавать нелегальные последовательности кода, которые имеют длину более двух байтов.
Вы не помечать язык, но я должен был проверить это, так что я использовал 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 до 31 являются непечатаемых символов, то 32 это пространство, а затем печатаемых символов:
...
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
является 0x7f
и после него, от 128 включительно до 254 не печатаются не допустимые символы. Вы можете видеть из UTF-8 chartable также:
U+007F
элемента кода представлен одним байта 0x7F
(бит 01111111
), в то время как элемент код U+0080
представлены два байт 0xC2 0x80
(биты 11000010 10000000
).
Если вы не знакомы с UTF-8 я настоятельно рекомендую прочитать эту прекрасную статью:
- 1. Набор CENTOS 6 MySQL набора символов UTF8
- 2. Набор символов utf8 дает синтаксическую ошибку
- 3. Тип «набор символов» не имеет значения «utf8»
- 4. Как создать строку без UTF8?
- 5. Как установить набор символов utf8 в ресурсе ядра magento?
- 6. Только для удаления символов, отличных от ASCII
- 7. Markdown, Perl и кодировка символов: рендеринг символов, отличных от ASCII
- 8. Соединение Firebird с использованием символов, отличных от ASCII, в пути
- 9. Получение символов, отличных от ASCII, для работы в функциях Ren'Py
- 10. Что может вызывать вопросительные знаки вместо символов, отличных от ASCII?
- 11. Ограничение Postgresql для проверки символов, отличных от ascii
- 12. mysql change набор символов по умолчанию latin1 to utf8
- 13. Предотвращение захвата символов, отличных от ASCII, в UITextView
- 14. MySQL: набор символов utf8 дает ошибку с DateTime
- 15. Как создать набор символов, например ASCII?
- 16. Как создать набор символов в Scala?
- 17. Предотвращение htmlentities от уничтожения символов utf8 ಠ_ಠ
- 18. Стоп ord() от использования символов, отличных от букв, - caesar cypher
- 19. Visual Studio 2015 RC Отображение символов, отличных от английского
- 20. Создать вектор из элементов, отличных от диагональных
- 21. Как включить чтение символов, отличных от ascii, в сервлетах
- 22. Как мне искать строку массива для символов, отличных от алфавита?
- 23. Python: создать список значений, отличных от
- 24. MySQL набор символов преобразования
- 25. Набор UTF8 на MySql
- 26. Неизвестный набор символов: 'utf8mb4'
- 27. Вставка символов, отличных от ASCII, в pdf с Python reportlab
- 28. Сравнение кодированных символов UTF8
- 29. Получить язык от UTF8
- 30. MySQL UTF8 символов нагрузки
Через интерфейс вы будете иметь трудное время, делая это. Вам нужно как-то сделать это программно. – leppie
Начните с определения вашего * языка программирования *, среды и/или контекста. Это очень сильно изменится в зависимости от того, с какой системой вы работаете/в/в. – deceze
Почему DOWNVOTE для этого вопроса? – swapneel