URL-адреса: двоичный двоичный объект, Unicode или кодированная строка Unicode? - PullRequest
2 голосов
/ 06 января 2009

Я хочу хранить URL-адреса в базе данных (в данном случае MySQL) и обрабатывать ее на Python. Хотя база данных и язык программирования, вероятно, не имеют отношения к моему вопросу.

В моей настройке я получаю Unicode-строки при запросе текстового поля в базе данных. Но действительно ли URL является текстовым? Является ли кодирование и декодирование для Unicode операцией, которая должна быть выполнена с URL? Или лучше сделать столбец в базе данных двоичным двоичным объектом?

Итак, как вы справляетесь с этой проблемой?

Пояснение: Этот вопрос не касается урлен-кодирования не-ASCII-символов в процентах. Речь идет о том, что юникод представляет текст, а строки байтов представляют способ кодирования этого текста в последовательность байтов. В Python (до 3.0) это различие проводится между типами unicode и str. В MySQL это текст в BLOBS. Таким образом, понятия кажутся соответствующими между языком программирования и базой данных. Но как лучше всего обрабатывать URL-адреса в этой схеме?

Ответы [ 3 ]

3 голосов
/ 06 января 2009

Соответствующий ответ находится в RFC 2396 , раздел 2,1 URI и не-ASCII символы


Отношения между URI и символами были источником путаница для персонажей, которые не являются частью US-ASCII. Описать отношения, полезно различать «характер» (как различимый семантический объект) и "октет" (8-битный байт). Существует два сопоставления: одно от символов URI до октетов и секунда от октетов до оригинальных символов:

последовательность символов URI-> последовательность октетов-> исходная последовательность символов

URI представляется как последовательность символов, а не как последовательность октетов. Это потому, что URI может быть «транспортирован» посредством не через компьютерную сеть, например, напечатаны на бумаге, перечитаны радио и т. д.


1 голос
/ 06 января 2009

Обратите внимание, что есть также стандарт для веб-адресов Unicode, IRI (Internationalized Resource Identifiers). RFC 3987

1 голос
/ 06 января 2009

На вопрос: «А действительно ли URL-это текст?»

Это зависит от контекста, в некоторых языках или библиотеках (например, Java, я не уверен насчет Python), URL может быть представлен внутри как объект. Тем не менее, URL всегда имеет четко определенное текстовое представление. Таким образом, хранение текстового представления гораздо более переносимо, чем хранение внутреннего представления, используемого любым текущим выбранным языком.

Синтаксис и семантика URL-адреса охватываются многими стандартами, рекомендациями и реализациями, но я думаю, что наиболее авторитетным источником для анализа и построения правильных URL-адресов будет RFC 2396 .

По вопросу о юникоде в разделе 2.1 рассматриваются не-ascii символы.

(Редактировать: изменил rfc-ссылку на самое новое издание, спасибо, С.Лотт)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...