Как проверить, находится ли строка в Python в ASCII?

В Java все находится в форме класса.

Если вы хотите использовать любой объект, тогда у вас есть две фазы:

  1. Объявить
  2. Инициализация

Пример:

  • Объявление: Object a;
  • Инициализация: a=new Object();

То же самое для концепции массива

  • Объявление: Item i[]=new Item[5];
  • Инициализация: i[0]=new Item();

Если вы не дают секцию инициализации, тогда возникает NullpointerException.

197
задан Amir 1 December 2015 в 11:36
поделиться

7 ответов

def is_ascii(s):
    return all(ord(c) < 128 for c in s)
163
ответ дан Alexander Kojevnikov 23 November 2019 в 05:13
поделиться

Жало (str - тип) в Python является рядом байтов. Существует никакой путь из сообщения только от рассмотрения строки, представляет ли этот ряд байтов строку ASCII, строку в 8-разрядном наборе символов как ISO-8859-1 или строку, закодированную UTF-8 или UTF-16 или что бы то ни было.

Однако, если Вы знаете используемое кодирование, тогда Вы можете decode str в строку unicode и затем использовать регулярное выражение (или цикл), чтобы проверить, содержит ли это символы за пределами диапазона, Вы обеспокоены.

2
ответ дан JacquesB 23 November 2019 в 05:13
поделиться

Как насчет того, чтобы делать это?

import string

def isAscii(s):
    for c in s:
        if c not in string.ascii_letters:
            return False
    return True
10
ответ дан miya 23 November 2019 в 05:13
поделиться

Вы могли использовать библиотеку регулярных выражений, которая принимает стандарт Posix [[: ASCII:]] определение.

2
ответ дан Steve Moyer 23 November 2019 в 05:13
поделиться

Ваш вопрос является неправильным; ошибка, которую Вы видите, не является результатом того, как Вы создали Python, но беспорядка между строками unicode и строками байтов.

Строки байтов (например, "нечто" или 'панель', в синтаксисе Python) являются последовательностями октетов; числа от 0-255. Строки Unicode (например, u "нечто" или u'bar') являются последовательностями unicode кодовых точек; числа от 0-1112064. Но Вы, кажется, интересуетесь символом Г©, который (в Вашем терминале) является многобайтовой последовательностью, которая представляет отдельный символ.

Вместо ord(u'é'), попробуйте это:

>>> [ord(x) for x in u'é']

, Который говорит Вам, которых представляет последовательность кодовых точек "Г©". Это может дать Вам [233], или это может дать Вам [101, 770].

Вместо chr() для инвертирования этого, существует unichr():

>>> unichr(233)
u'\xe9'

Этот символ может на самом деле быть представлен или сингл или несколько unicode "кодовых точек", которые самих представляют или графемы или символы. Это любой "e с акутом (т.е. кодовая точка 233)" или "e" (кодовая точка 101), сопровождается "акутом на предыдущем символе" (кодовая точка 770). Таким образом, этот точно тот же самый символ может быть представлен как структура данных Python u'e\u0301' или u'\u00e9'.

Большую часть времени Вам не придется заботиться об этом, но это может стать проблемой, если Вы выполняете итерации по строке unicode, поскольку повторение работает кодовой точкой, не разложимым символом. Другими словами, len(u'e\u0301') == 2 и len(u'\u00e9') == 1. Если это имеет значение для Вас, можно преобразовать между составленными и анализируемыми формами при помощи [1 110] unicodedata.normalize .

Глоссарий Unicode может быть полезным руководством по пониманию некоторых из этих проблем путем указания, как, как каждый конкретный термин относится к другой части представления текста, который намного более сложен, чем многие программисты, понимают.

17
ответ дан Glyph 23 November 2019 в 05:13
поделиться

Я думаю, что Вы не задаете правильный вопрос -

, строка А в Python не имеет никакого свойства, соответствующего 'ASCII', utf-8, или любому другому кодированию. Источник Вашей строки (читаете ли Вы его из файла, введенного с клавиатуры, и т.д.), возможно, закодировал строку unicode в ASCII для создания строки, но это - то, куда необходимо пойти для ответа.

, Возможно, вопрос, который можно задать: "Действительно ли эта строка является результатом кодирования строки unicode в ASCII?" - Это можно ответить путем попытки:

try:
    mystring.decode('ascii')
except UnicodeDecodeError:
    print "it was not a ascii-encoded unicode string"
else:
    print "It may have been an ascii-encoded unicode string"
245
ответ дан Vincent Marchetti 23 November 2019 в 05:13
поделиться

Я использую следующее, чтобы определить, является ли строка ascii или unicode:

>> print 'test string'.__class__.__name__
str
>>> print u'test string'.__class__.__name__
unicode
>>> 

Затем просто используйте условный блок для определения функции:

def is_ascii(input):
    if input.__class__.__name__ == "str":
        return True
    return False
-5
ответ дан 23 November 2019 в 05:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: