Обнаружение символов не-ascii в строке unicode

Для текстового файла (или строки юникода), что является хорошим способом обнаружения символов, которые выходят за рамки кодировки ascii? Я мог бы просто перебрать каждый символ на ord(), но мне интересно, есть ли более эффективный, элегантный или идиоматический способ сделать это.

Конечной целью здесь является компиляция списка символов в данных, которые не могут кодироваться в ascii.

В случае, если это имеет значение, размер моего корпуса составляет около 500 МБ /1200 текстовых файлов. Запуск (предварительно скомпилированный ваниль) Python 3.3.1 на Win7 (64 бит).

Ответ 1

Конечная цель здесь состоит в том, чтобы скомпилировать список символов в данных который не может кодировать ascii.

Самый эффективный метод, который я могу придумать, - использовать re.sub(), чтобы вырезать любые допустимые символы ASCII, которые должны оставить вас с строка, содержащая все символы, отличные от ASCII.

Это просто вычеркнет печатаемые символы...

>>> import re
>>> print re.sub('[ -~]', '', u'£100 is worth more than €100')
£€

... или если вы хотите включить символы, не подлежащие печати, используйте это...

>>> print re.sub('[\x00-\x7f]', '', u'£100 is worth more than €100')
£€

Чтобы устранить дубликаты, просто создайте set() возвращаемой строки...

>>> print set(re.sub('[\x00-\x7f]', '', u'£€£€'))
set([u'\xa3', u'\u20ac'])