Правила для пули и юникода

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

кодировка url очень ограничительна. См. http://www.blooberry.com/indexdot/html/topics/urlencoding.htm

Итак, например, как люди обращаются к заглавным пулям для таких вещей, как

"Una lágrima cayó en la arena"

Можно найти разумную таблицу для индоевропейских языков, т.е. вещи, которые могут быть закодированы через ISO-8859-1. Например, таблица преобразования будет переводить 'á' = > 'a', поэтому slug будет

"уна-Lagrima-Кайо-ан-ла-Арена"

Тем не менее, я использую unicode (в частности, используя кодировку UTF-8), поэтому никаких гарантий относительно того, какие коды кода я собираюсь получить (я должен подготовиться к вещам, которые не могут быть ISO-8859- 1.

Я nushell. Как с этим справиться? Должен ли я придумать таблицу преобразования для символов в диапазоне ISO_8859-1 (< 255) и удалить все остальное?

РЕДАКТИРОВАТЬ. Чтобы дать немного больше контекста, априори, я действительно не ожидаю распространения данных на неиндоязычных языках, но я хотел бы иметь план, если я столкнусь с такими данные. Таблица преобразования для расширенного ASCII будет приятной. Любые указатели?

Кроме того, поскольку люди спрашивают, я использую python, работающий в Google App Engine

Ответ 1

Почти полная таблица транслитерации (для латинских, греческих и кириллических наборов символов) можно найти в библиотеке slughifi. Он ориентирован на Django, но может быть легко модифицирован для удовлетворения общих потребностей (я использую его с помощью приложения Werkzeug на AppEngine).

Ответ 2

Я просто использую utf-8 для URL-путей. Пока домен не является IDN FF3, IE отлично справляется с этим. Google читает и отображает их правильно. IRI RFC позволяет использовать Unicode. Просто убедитесь, что вы правильно разобрали входящие URL.

Ответ 3

В общем, это будет зависеть от языка, который вы ожидаете получить. Если ваша основная пользовательская база - японская, то все, кроме символов ISO-8859-1, вряд ли пройдет хорошо.

Тем не менее, одним из вариантов может быть использование режима транслитерации, если ваша библиотека преобразования набора символов поддерживает его. Например, с помощью GNU iconv можно сделать:

] echo Una lágrima cayó en la arena|iconv -f utf8 -t ascii//TRANSLIT
Una lagrima cayo en la arena

Как вы можете видеть, акцентированные символы были автоматически преобразованы в нечто в диапазоне ASCII. Как перевести это на код, конечно, будет зависеть от языка, который вы используете, но если ваш язык основан на GNU iconv для преобразования кодировки (и, если это возможно на Linux, возможно, это так), этот трюк, вероятно, может быть применен непосредственно просто указав "ascii//TRANSLIT" как набор символов преобразования.

Тем не менее, одна вещь отметить это только эффективна с символами, которые "похожи" на что-то в ASCII. Например:
] echo 我輩は猫である。名前はまだない。|iconv -f utf8 -t ascii//TRANSLIT                                               
????????????????

Как вы можете видеть, это мало помогает японцам и требует дальнейшей обработки впоследствии для удаления символов, не подходящих для URL-адресов.

Ответ 4

Если все остальное не удается, вы можете использовать таблицу преобразования, но может быть доступно более эффективное решение. Какой серверный язык вы используете?