Проверка строки на ASCII в Python: альтернатива ord()
Пройдите тест, узнайте какой профессии подходите
Быстрый ответ
Для определения строки ASCII в Python 3.7 и более новых версиях, можно использовать встроенный метод isascii()
:
print("ASCII" if my_string.isascii() else "Не ASCII")
В более ранних версиях Python проверка осуществляется посредством метода кодирования:
print("ASCII" if my_string.encode('ascii', 'ignore') == my_string.encode() else "Не ASCII")
В зависимости от версии Python и потребности в совместимости с предыдущими версиями при необходимости может использоваться ассоциированный с строки метод .isascii()
или метод encode()
.
Работа со строками в Python
Работая со строками в Python, следует помнить, что они по умолчанию разрабатываются как последовательности символов Unicode.
Чтобы проверить соответствие строки стандарту ASCII, можно использовать str.isascii()
в Python версии 3.7 и выше.
Использование decode() и исключений
Функция decode()
может быть использована для проверки, является ли строка ASCII-кодированной.
try:
my_string.decode('ascii')
print("ASCII")
except UnicodeDecodeError:
print("Не ASCII")
В данном случае, попытка декодировать строку в ASCII выдаст исключение, если строка не соответствует этому формату.
Встроенная функция ord()
Функция ord()
проверяет каждый символ строки на принадлежность к диапазону ASCII.
is_ascii = all(ord(c) < 128 for c in my_string)
Погружаемся глубже – понимаем происхождение вашей строки
Понимание как была сгенерирована строка важно для определения подхода к её кодированию.
Дополнительные способы и особые случаи
Существуют и другие методы для работы с ASCII кодировкой.
В мире кодировок
is_ascii = len(my_string) == len(my_string.encode())
Сравнивая длину строки и длину её кодированного представления, можно проверить соответствие строки ASCII.
Визуализация
Представьте строку как пассажира в аэропорту ASCII:
Регистрация в аэропорту ASCII (✈️): "Только 128 основных пассажиров (0-127), пожалуйста!"
Проверка на безопасность:
boarding_pass = all(ord(c) < 128 for c in string)
Кто может сесть на борт:
Строка: "hello" Посадка одобрена: ✅
Строка: "café" Посадка отклонена: ❌
На борту – только ASCII.
Глубокое погружение – рассмотрим Unicode
Метод encode()
с опцией 'ignore' используется для пропуска символов, которые не относятся к ASCII:
ascii_string = my_string.encode('ascii', 'ignore')
is_ascii = ascii_string.decode('ascii') == my_string
Снова обратимся к функции ord()
Проверяем каждый символ, используя ord(c) < 128
:
for c in my_string:
if ord(c) >= 128:
print(f"Обнаружен символ не-ASCII: {c}")
break
Продвинутый подход: нормализация Unicode
Нормализация обеспечивает единообразное кодирование визуально идентичных строк Unicode. В контексте ASCII это имеет значение:
import unicodedata
normalized_string = unicodedata.normalize('NFD', my_string)
is_ascii = normalized_string.isascii()
Производится нормализация к формату 'NFD'.
Полезные материалы
- Встроенные типы — Документация Python 3.12.2
- Как проверить, является ли строка в Python строкой ASCII? – Stack Overflow
- Детальный разбор Unicode — Документация Python 3.12.2
- Таблица ASCII – Коды символов ASCII
- Часто задаваемые вопросы о UTF-8 и Unicode
- Строки — Руководство по портированию Python 3 версии 1.0