2010-03-30 4 views
1

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

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» вместо этого. Мы проверили множество нечетных персонажей, но «Е», кажется, единственный персонаж, в котором проблема.

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

Билли

+0

Я не слишком уверен, как помочь, но Ouf из любопытства, может вы не использовать utf8 для кодирования? Как правило, гораздо меньше ошибок, связанных с такими проблемами. – Flukey

+0

Не использовать UTF8 в качестве сервера, на который мы обращаемся (сторонняя служба), настаивать на использовании ISO 8859-1 – bstack

+0

У меня нет ответа на ваш вопрос, но было бы интересно узнать, что произойдет, если вы используете Encoding.Default и «windows-1252» в качестве кодировок (см. http://mindprod.com/jgloss/encoding.html). –

ответ

1

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

+0

Сервер не задыхается, символ «£» не кодируется, как ожидалось. Сервер, который получает сообщение, все еще работает правильно. – bstack

+1

@ user243143: Я не вижу проблемы тогда :) – leppie

0

С немного исследований я обнаружил:

ISO-8859-1 делится на 2 группы символов: (ссылка: 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