【问题标题】:'£' character does not seem to encode properly - expect '%a3' but get '%u00a3''£' 字符似乎没有正确编码 - 期望 '%a3' 但得到 '%u00a3'
【发布时间】:2010-03-30 08:50:59
【问题描述】:

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

有谁知道这里的问题是什么? - 非常感谢您的帮助...

比利

【问题讨论】:

  • 我不太确定如何提供帮助,但出于好奇,您可以不使用 utf8 进行编码吗?通常出现此类问题的可能性要小得多。
  • 不能使用 UTF8 作为我们调用的服务器(第三方服务)坚持使用 ISO 8859-1
  • 我没有您的问题的答案,但很想知道如果您使用 Encoding.Default 和 'windows-1252' 作为编码会发生什么(请参阅mindprod.com/jgloss/encoding.html)。
  • 保罗,请在我取得了一些进展的地方查看我的答案。我现在有一个新问题,你也许可以回答这个问题。为帮助干杯

标签: c# encoding iso-8859-1


【解决方案1】:

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

【讨论】:

  • 服务器没有阻塞,只是“£”符号没有按预期编码。接收消息的服务器仍然正常运行。
  • @user243143:然后我看不到问题:)
【解决方案2】:

通过一些研究Ì发现:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-09
    • 1970-01-01
    • 2013-02-03
    • 2021-10-24
    • 2013-10-27
    • 2016-06-29
    相关资源
    最近更新 更多