Символ «£», кажется, не кодирует должным образом - ожидайте «% a3», но получите «% u00a3» - PullRequest
1 голос
/ 30 марта 2010

Я хочу отправить символ знака фунта, т. Е. '£', кодированный как ISO-8859-1 по проводам.Я выполняю это следующим образом:

var _encoding = Encoding.GetEncoding("iso-8859-1");
var _requestContent = _encoding.GetBytes(requestContent);
var _request = (HttpWebRequest)WebRequest.Create(target);

_request.Headers[HttpRequestHeader.ContentEncoding] = _encoding.WebName;
_request.Method = "POST";
_request.ContentType = "application/x-www-form-urlencoded; charset=iso-8859-1";
_request.ContentLength = _requestContent.Length;

_requestStream = _request.GetRequestStream();
_requestStream.Write(_requestContent, 0, _requestContent.Length);
_requestStream.Flush();
_requestStream.Close();

Когда я ставлю точку останова на цель, я ожидаю получить следующее: «% a3», однако вместо этого я получаю «% u00a3».Мы проверили много нечетных символов, но символ «£», кажется, единственный, где есть проблема.

Кто-нибудь знает, в чем здесь проблема?- Помощь будет принята с благодарностью ...

Билли

Ответы [ 2 ]

1 голос
/ 30 марта 2010

Из того, что я вижу, они эквивалентны. Если сервер захлебнется, то, вероятно, сервер не поддерживает экранированный Unicode.

0 голосов
/ 30 марта 2010

Из небольшого исследования Ì найдено:

ISO-8859-1 разделен на 2 группы символов: (ref: http://en.wikipedia.org/wiki/ISO_8859-1)

Нижний диапазон от 20 до 7E - где все символы, кажется, закодированы правильно Более высокий диапазон от A0 до FF - где все символы, по-видимому, кодируют свое эквивалентное значение Unicode

Поскольку '£' находится в верхнем диапазоне от A0 до FF, оно кодируется в% u00a3. Фактически, когда я использую первые несколько символов более высокого диапазона от A0 до FF, т.е. '¡' £ ¤ ¥ ¤§¦ © ¨ «¬® ', я получаю'% u00a1% u00a2% u00a3% u00a4% u00a5% u00a6% u00a7 % u00a8% u00a9% u00aa% u00ab% u00ac% u00ae. Такое поведение соответствует.

Вопрос, который у меня сейчас возникает, заключается в том, почему символы в верхнем диапазоне от A0 до FF кодируются в свое значение Unicode, а не в эквивалентное значение ISO-8859-1?

% u00a1% u00a2% u00a3% u00a4% u00a5% u00a6% u00a7% u00a8% u00a9% u00aa% u00ab% u00ac +% u00ae

...