Paranoid - курс от Codeby Security School

Представляем вашему вниманию курс от команды codeby - "Комплекс мер по защите персональных данных, анонимности в интернете и не только" Подробнее ...


Как можно быстро получить все буквы русского или английского алфавита?

Просматривая исходник одной из программ, увидел следующую строку:

Как видно обычный лист, заполненный значениями, в плане синтаксиса ошибок нет, но есть один минус, все значения были введены вручную. С одной стороны значений не много, всего 26, в принципе можно и ввести, но если, к примеру, понадобиться добавить ещё один такой же лист, который будет содержать все буквы русского алфавита или сразу два списка обоих алфавитов в нижнем регистре, как быть тогда, тоже все руками вводить? Конечно, можно найти и скопировать уже готовый список значений и ничего вводить вручную не придется, но есть ещё один способ, о нём я расскажу в этой статье.

Как получить все буквы английского алфавита

Для начала вспоминаем, что есть такая вещь, как Unicode. Юникод — это стандарт кодирования символов, который позволяет представить знаки практически всех письменных языков Википедия. В данный момент в нём зарезервировано 1.112.064 позиций символов, из которых сейчас используется чуть более 100 000. Кодовое пространство Unicode разделено на 17 плоскостей. Нас интересует нулевая (базовая многоязычная) плоскость, имеющая диапазон от U+0000 до U+FFFF. Нулевая плоскость, содержит символы, часто употребительных письменностей и так же разбита на определенные области (диапазоны).

Латиница

Все области нас, конечно же, не интересуют, будем работать лишь с некоторыми диапазонами значений. И так, например, в нашей программе требуется получить все буквы английского алфавита от A до Z. Сразу надо пояснить, что Юникод не содержит буквы английского алфавита, точно так же, как и не содержит буквы немецкого, русского алфавита. А всё потому, что хоть мы и говорим, например буквы английского алфавита, на самом деле все буквы немецкого, итальянского, французского и того же английского языка состоят из 26 букв латинского алфавита. Поэтому нам нужно искать область, выделенную под латиницу.

Основной диапазон, выделенный под латиницу от U+0020 до U+007F (Основная латиница), где U Unicode, а следом идут четыре шестнадцатеричных числа. Вся эта область нам, конечно же, не нужна, потому что кроме букв, в нёй так же содержится ещё много других знаков и чисел, которые нас пока что не интересуют.

Для указания юникод последовательности в языке c# используется управляющая последовательность символов \u.

Юникод запись, например ‘\u0025’ можно сократить, если использовать другую управляющую последовательность символов \x

Результаты те же.

Выделенная область под латиницу занимает диапазон от \u0020 до \u007F (\x20 — \x7F). Этот основной диапазон, который кроме букв, так же содержит числа и символы (%, $, #), нам же нужен отрезок, который содержит только буквы латинского алфавита. Сразу хочу сказать, что буквы представлены, как в верхнем регистре, то есть все буквы от A до Z большие, так и в нижнем регистре, когда все буквы от a до z маленькие.


Codeby Security School от Сodeby

Мы запустили свою онлайн школу по информационной безопасности. Защита персональных данных, анонимность в сети интернет, настройка виртуальных машин, безопасная передача данных, анти форензика и еще много всего полезного в курсе Paranoid


Область, выделенная под буквы верхнего регистра: от \x41 до \x5А

Шестнадцатеричная система не очень удобна для восприятия, поэтому переведем шестнадцатеричные коды в десятичную систему.

Как перевести число из шестнадцатеричной системы в десятичную

Сначала добавим строку: using System.Globalization;

Затем, берём шестнадцатеричный набор символов \x41, убираем первые два символа (\x) оставляем только 41, после чего используя метод parse, преобразуем строку в число.

либо обрезаем первые два символа

В результате преобразования получили число 65, если теперь подставить ‘\x5А’ и так же преобразовать строку в число, то получим число 90. Из этого следует, что диапазон от 65-90 — это и есть наш отрезок, в котором содержаться все латинские буквы в верхнем регистре, как видно ничего сложного.

Как перевести число в шестнадцатиричную систему

Обратный перевод dec в hex.

либо в unicode

В результате всех вычислений получаем следующую табличку:

Название Символы DEC HEX
Латиница A..Z 65..90 41..5A
Латиница a..z 97..122 61..7A

Теперь имея на руках данную таблицу, можно легко получить, к примеру, массив всех английских букв от A до Z в верхнем регистре.

Результат:

алфавит

А вот так, например можно вывести слово HELLO из полученного массива

Как получить все буквы русского алфавита

С латиницей, надеюсь всё понятно, теперь рассмотрим, как получить буквы русского алфавита. В отличие от английского алфавита, в русском используется Кириллица (Cyrillic), под которую так же в нулевой плоскости выделен определенный диапазон: U+0400..U+04FF (Unicode 1.1).

Название Символ DEC HEX DEC код Ё
Кириллица А…Я 1040..1071 0410..042F 1025
Кириллица а..я 1072..1103 0430..044F 1105

Как видно всё то же самое, но есть один нюанс, в диапазон значений не попадает буква Ё, как для нижнего, так и верхнего регистра.

В следующем примере показано, как получить все буквы русского алфавита от А до Я в верхнем регистре.

И напоследок таблица чисел

Название Символы DEC HEX
Числа 0..9 48..57 30..39

Читайте также:


Безопасная сделка с гарантом Сodeby

Гарант является доверенным посредником между Участниками при проведении сделки.​ Услуга сайта «Проведение сделок через Гаранта» предоставляется всем зарегистрированным пользователям codeby.net Подробнее ...


Похожие темы

c# Как программно добавить контрол на форму... c# Как программно добавить контрол на форму В этой статье рассмотрим процесс программного добавления визуального элемента управления (Control) на фор...
Пространства имен в С++ Известен модульный подход к программированию, согласно которому программу нужно рассматривать как совокупность модулей, каждый из которых предст...
У меня не открывается xml файл, что делать?... Что делать, если не удается открыть xml файл? В этой статье хотелось бы рассмотреть некоторые причины, из-за которых очень часто не удается открыть x...
Вызов хранимой процедуры на клиенте... Вызов хранимой процедуры MySQL на клиенте В этой статье добавим возможность вызова хранимой процедуры из нашего клиентского приложения. Для начала...
Реализация игры Жизнь на С++ и OpenMP... Задание Реализовать компьютерную реализацию классического варианта игры «Жизнь». С использование средств OpenMP. Классический вариант игры «...