2008-10-01 2 views
6

Обычный метод URL-кодирования символов в Юникоде состоит в том, чтобы разбить его на 2% HH-коды. (\ u4161 =>% 41% 61)Unicode URL-декодирование

Но, как это юникода отличается при декодировании? Откуда вы знаете, что % 41% 61 является \ u4161 - \ x41 \ x61 ("Aa")?

Есть 8-битные символы, которым требуется кодирование, которым предшествует % 00?

Или, что предполагается, что символы Unicode будут потеряны/разделены?

ответ

7

По Wikipedia:

текущего стандарт

обобщенного синтаксиса мандатов URI, что новые схемы URI , которые обеспечивают для представления символьных данных в URI должны, в эффекте, представляют собой символы из без поддержки перевода, и должен преобразовывать все остальные символов в байты в соответствии с UTF-8, а затем процентное кодирование этих значений. Это требование составило , введенное в январе 2005 года в публикации RFC 3986. Схемы URI , введенные до этой даты, не являются .

Не задано текущим Спецификация - это что делать с закодированными символьными данными. Например, в компьютерах, символьные данные показывают в закодированном виде на некотором уровне и , таким образом, могут быть обработаны как двоичные данные , либо как символьные данные при , сопоставленные с символами URI. Предположительно, зависит от URI-схемы спецификации для учетной записи возможность и требуется один или другой, но на практике немногие, если есть, на самом деле.

Нестандартные реализации

Там существует нестандартная кодировку для символов Unicode:% иххого, где хххх представляет собой значение Юникода представлен в виде четыре шестнадцатеричных цифр. Такое поведение не указано ни одним RFC, и был отклонен W3C. Третья редакция ECMA-262 по-прежнему включает в себя функцию escape (string) , которая использует этот синтаксис , но также функцию encodeURI (uri) , которая преобразуется в UTF-8 и процентов - кодирует каждый октет.

Таким образом, это похоже на то, что он полностью связан с человеком, написавшим метод unencode ... Не стандарты забавы?

0

То, что я всегда делал, - это первый UTF-8, кодирующий строку Unicode, чтобы сделать ее серией из 8-битных символов до того, как она выйдет из любого тех с% HH.

P.S. - Я могу только надеяться, что нестандартные реализации (% uxxxx) мало и далеко друг от друга.

0

Поскольку URI были введены до того, как unicode был вокруг или по крайней мере широко используется, я полагаю, что это очень конкретный вопрос, связанный с реализацией. UTF-8, кодирующий ваш текст, а затем избегая того, что на нормальную звучит как лучшая идея, поскольку это полностью обратно совместимо с любыми системами ASCII/ANSI на месте, хотя вы можете получить нечетный странный символ или два.

На другом конце, чтобы декодировать, вы отменили бы текст и получите строку UTF-8. Если кто-то, использующий устаревшую систему, пытается отправить ваши данные в ASCII/ANSI, никакого вреда не будет сделано, это уже (почти) кодировка UTF-8.

+0

Это именно то, что следует использовать. Описанные вами персонажи могут показаться странными, но ни один из них не будет управляющим персонажем (так работает UTF-8), и это действительно хорошо. – 2010-10-08 07:55:33

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