Некоторые из них ASCII, некоторые нет. Вы можете найти значения here для HTML 4 (или аналогичные URL для HTML5, XHTML 4 и т. Д.). Эта таблица дает вам кодовую точку Unicode для каждого объекта; Точки кода Unicode 0-127 соответствуют символам ASCII 0-127, а кодовые точки Unicode 128+ не являются ASCII.
Для тех, которые не являются ASCII, вы должны решить, что их заменить с прежде чем вы сможете написать код, чтобы заменить их.
В частности:
—
является —
, U + 2014, не ASCII, обычно заменяется --
.
–
является –
, U + 2013, не-ASCII, обычно заменяется на -
.
§
является §
, U + 00A7, non-ASCII; нет обычной замены, так что вам нужно будет что-то выбрать, может быть "sect. "
?
 
- неразрывное пространство, U + 00A0, не-ASCII, обычно замененное пробелом.
"
является "
, U + 0022, уже ASCII.
Один из способов их замены заключается в использовании метода str.replace
. Например:
h = h.replace('—', '--').replace('–', '-')
h = h.replace('§', 'sect. ').replace(' ', ' ')
Однако, я думаю, вы бы лучше преобразовать в незаменяемые Unicode, а затем с помощью str.translate
(или unicode.translate
, если это Python 2.x) для отображения символов. Таблица переводов становится намного проще (и более эффективно, если это имеет значение), чем длинная цепочка из replace
звонков, когда у вас есть более 4 символов. И таким образом, вы также будете обрабатывать такие вещи, как unescaped em-dashes или другие персонажи, которых вы не заметили. Например:
h = html.unescape(h)
table = {0x2013: '-', 0x2014: '--', 0x00a7: 'sect. ', 0x00A0: ' '}
h = h.translate(table)
h.encode('ascii') # forces an exception if you missed any non-ASCII chars
Это не ascii. Просто посмотрите на таблицу ascii - ни один из этих символов не указан там – Eric
Попробуйте найти Google для ASCII и обратив внимание на коды символов (числовые значения). Вот ваш ответ. –
Мне не ясно, что ваш заголовок правильно отражает вашу задачу. Поскольку html может содержать * string * '—', и все семь из этих символов являются ascii, вы уверены, что вам нужно что-то там заменить? –