Вопрос

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

Но как распознается unicode при декодировании?Откуда ты это знаешь %41%61 является \u4161 против. \x41\x61 ("Аа")?

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

Или дело в том, что символы Юникода должны быть потеряны / разделены?

Это было полезно?

Решение

Согласно Википедия:

Текущий стандарт

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

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

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

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

Итак, похоже, что это полностью зависит от человека, пишущего метод unencode...Разве стандарты не забавны?

Другие советы

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top