OWIN - это спецификация. Это набор инструкций, который описывает, «как» что-то должно работать.
Katana - это реализация Microsoft OWIN, которая также включает некоторые компоненты промежуточного программного обеспечения для обеспечения безопасности / аутентификации, обслуживания статических файлов и некоторых других вещей.
Kestrel - кроссплатформенный веб-сервер Microsoft для разработки, который можно использовать с ASP.NET 5. и NetCore
Unidecode выглядит законченным решением. Он преобразует причудливые кавычки в кавычки ascii, латинские символы с диакритическими знаками в безударные и даже пытается транслитерировать символы, которые не имеют эквивалентов ASCII. Таким образом, вашим пользователям не нужно будет видеть кучу? когда вам нужно было передать их текст через устаревшую 7-битную систему ascii.
>>> from unidecode import unidecode
>>> print unidecode(u"\u5317\u4EB0")
Bei Jing
http://www.tablix.org/~avian/blog/archives/2009/01/unicode_transliteration_in_python/
В моем первоначальном ответе я также предложил unicodedata.normalize
. Однако я решил проверить это, и оказалось, что он не работает с кавычками Unicode. Он хорошо выполняет перевод акцентированных символов Юникода, поэтому я предполагаю, что unicodedata.normalize
реализован с использованием юникода . функция декомпозиции
, которая заставляет меня поверить, что она, вероятно, может обрабатывать только символы Unicode, которые являются комбинациями буквы и диакритического знака, но я не очень разбираюсь в спецификации Unicode, так что я мог бы просто быть горячим air ...
В любом случае вы можете использовать unicode.translate
, чтобы вместо этого иметь дело с символами пунктуации. Метод translate
принимает словарь ординалов Unicode к ординалам Unicode, таким образом, вы можете создать отображение, которое преобразует пунктуацию Unicode только в ASCII-совместимую пунктуацию:
'Maps left and right single and double quotation marks'
'into ASCII single and double quotation marks'
>>> punctuation = { 0x2018:0x27, 0x2019:0x27, 0x201C:0x22, 0x201D:0x22 }
>>> teststring = u'\u201Chello, world!\u201D'
>>> teststring.translate(punctuation).encode('ascii', 'ignore')
'"hello, world!"'
При необходимости вы можете добавить больше отображений пунктуации, но Я не думаю, что вам обязательно нужно беспокоиться об обработке каждого символа препинания Unicode. Если вам нужно обрабатывать акценты и другие диакритические знаки,
Интересный вопрос.
Google помог мне найти эту страницу , которая описывает использование модуля unicodedata в следующем виде:
import unicodedata
unicodedata.normalize('NFKD', title).encode('ascii','ignore')
Дополнительное обсуждение этого вопроса на http://code.activestate.com/recipes/251871/ , где есть решение NFKD и некоторые способы создания таблицы преобразования, для таких вещей, как ± => +/- и других небуквенных символов.