Удалить не-ASCII символы из строки, используя python / django

Могу ли я представить рекурсивное решение Python для этой проблемы?

def choose_iter(elements, length):
    for i in xrange(len(elements)):
        if length == 1:
            yield (elements[i],)
        else:
            for next in choose_iter(elements[i+1:len(elements)], length-1):
                yield (elements[i],) + next
def choose(l, k):
    return list(choose_iter(l, k))

Пример использования:

>>> len(list(choose_iter("abcdefgh",3)))
56

Мне нравится его простота.

16
задан smci 22 November 2015 в 01:34
поделиться

4 ответа

Вы можете использовать первые 128 символов ASCII, поэтому получите номер каждого символа с помощью ord и удалите его, если это вне диапазона

# -*- coding: utf-8 -*-

def strip_non_ascii(string):
    ''' Returns the string without non ASCII characters'''
    stripped = (c for c in string if 0 < ord(c) < 127)
    return ''.join(stripped)


test = u'éáé123456tgreáé@€'
print test
print strip_non_ascii(test)

Результат

éáé123456tgreáé@€
123456tgre@

Обратите внимание, что @ включено, потому что, в конце концов, это символ ASCII. Если вы хотите удалить определенное подмножество (например, только числа, прописные и строчные буквы), вы можете ограничить диапазон, просмотрев таблицу ASCII

EDITED: после повторного прочтения вашего вопроса, возможно, вам нужно экранировать свой HTML код, поэтому все эти символы отображаются правильно после рендеринга. Вы можете использовать фильтр escape в своих шаблонах.

20
ответ дан 30 November 2019 в 21:10
поделиться

Чтобы избавиться от специальных символов xml, html '<', '>', '&', вы можете использовать cgi.escape:

import cgi
test = "1 < 4 & 4 > 1"
cgi.escape(test)

Вернет:

'1 &lt; 4 &amp; 4 &gt; 1'

Это, вероятно, тот минимум, которого вам следует избегать проблема. Для получения дополнительной информации вы должны знать кодировку своей строки. Если она соответствует кодировке вашего html-документа, вам не нужно делать что-то еще. Если нет вам нужно преобразовать в правильную кодировку.

test = test.decode("cp1252").encode("utf8")

Предположим, что ваша строка - cp1252, а ваш html-документ - utf8

1
ответ дан 30 November 2019 в 21:10
поделиться

Я нашел это некоторое время назад, так что это ни в коем случае не моя работа. Я не могу найти источник, но вот фрагмент из моего кода.

def unicode_escape(unistr):
    """
    Tidys up unicode entities into HTML friendly entities

    Takes a unicode string as an argument

    Returns a unicode string
    """
    import htmlentitydefs
    escaped = ""

    for char in unistr:
        if ord(char) in htmlentitydefs.codepoint2name:
            name = htmlentitydefs.codepoint2name.get(ord(char))
            entity = htmlentitydefs.name2codepoint.get(name)
            escaped +="&#" + str(entity)

        else:
            escaped += char

    return escaped

Используйте его вот так

>>> from zack.utilities import unicode_escape
>>> unicode_escape(u'such as ® I want')
u'such as &#174 I want'
3
ответ дан 30 November 2019 в 21:10
поделиться

Вам нечего делать, поскольку Django автоматически экранирует символы:

см .: http: //docs.djangoproject .com / ru / dev / themes / templates / # id2

0
ответ дан 30 November 2019 в 21:10
поделиться
Другие вопросы по тегам:

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