1

我想通过网络发送井号字符,即编码为 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'。我们测试了许多奇怪的字符,但“£”似乎是唯一有问题的字符。

有谁知道这里有什么问题?- 帮助将不胜感激......

比利

4

2 回答 2

1

据我所知,它们是等价的。如果服务器阻塞,那么服务器可能不支持转义的 Unicode。

于 2010-03-30T09:00:47.997 回答
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

于 2010-03-30T11:35:40.733 回答