2015-05-24 1 views
-1

У меня есть проект, где мне нужно «заменить все символы без символов ASCII (в html) эквивалентами ASCII везде, где это возможно».Есть ли символы, такие как — – §   " non-ascii or ascii?

Мне просто интересно: персонажи в названии не-ascii или ascii?

Если они не являются ascii, как их преобразовать в ascii с помощью Pyhton? Благодаря!

+0

Это не ascii. Просто посмотрите на таблицу ascii - ни один из этих символов не указан там – Eric

+0

Попробуйте найти Google для ASCII и обратив внимание на коды символов (числовые значения). Вот ваш ответ. –

+2

Мне не ясно, что ваш заголовок правильно отражает вашу задачу. Поскольку html может содержать * string * '—', и все семь из этих символов являются ascii, вы уверены, что вам нужно что-то там заменить? –

ответ

3

Некоторые из них 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 
+0

Я думаю, что вы только что выполнили задание для OP –

+0

@PadraicCunningham: К счастью, если это действительно домашнее задание, и он слишком невежественный или ленивый, чтобы даже самому начать проблему или попытаться понять ответ, я бы сказал, что есть хороший шанс, что он потерпит неудачу, потому что он пытается запустить его по байтам, а не в Юникоде, и он не работает, или потому, что он не знает, как перейти от «таких символов, как ...» ко всем символам, включенным в присваивание ... (Хотя, если он действительно пытается решить проблему, он, надеюсь, не будет проблем.) – abarnert

+0

Другой возможной интерпретацией является «какой из этих символов должен быть преобразован в сущности», а другой - сами коды объектов ASCII (что, конечно, они находятся). Назначение, чтобы закрыть как неясное, но определенно продвигать этот попытку ответа. – tripleee

Смежные вопросы