【问题标题】:Web service response encoding issueWeb 服务响应编码问题
【发布时间】:2023-04-09 18:30:02
【问题描述】:

我正在开发一个基于 ASP.Net asmx 网络服务的网络服务。服务端会响应 byte[] 到 UTF-8 编码的客户端,客户端将 byte[] 转换为字符串。

我的困惑是,服务器端的英镑字符(我在写 Http 响应之前转储,服务器端的字符正确为英镑)将被接收为 ??从客户端。

任何想法有什么问题吗?我怀疑这是编码问题,但我不知道如何进一步调试以及任何会影响的设置(来自客户端 Web 服务代理的设置?)?

这是我从 Fiddler 那里得到的标题部分。

HTTP/1.1 200 正常 日期:格林威治标准时间 2009 年 2 月 20 日星期五 16:51:30 服务器:Microsoft-IIS/6.0 缓存控制:无缓存 杂注:无缓存 X-Powered-By: ASP.NET X-AspNet-版本:2.0.50727 缓存控制:私有 内容类型:文本/xml 内容长度:22752

xml 版本="1.0" 编码="utf-8"

【问题讨论】:

标签: asp.net encoding service


【解决方案1】:

首先要做的是嗅探实际发送的内容,包括标头、XML 声明和构成文本本身的字节。

Fiddler 可以作为 HTTP 代理,或者您可以使用 WireShark 在网络级别进行嗅探。

一旦您获得了这三位信息(Content-Type 标头、XML 声明和构成井号的字节),如果您更新您的答案,我们将看看我们能做些什么。听起来确实很奇怪,因为通常 ASP.NET 会正确处理所有这些问题。

您的客户端代码是什么样的?这也只是普通的 .NET Web 服务客户端代码吗?

编辑:尝试在 Fiddler 中找到二进制(十六进制转储)显示,以便您可以找到 字节

但是,我强烈怀疑问题仅仅是将结果转储到控制台。下面是一些用于转储 unicode 代码点的代码:

static void DumpString (string value)
{
    foreach (char c in value)
    {
        Console.Write ("{0:x4} ", (int)c);
    }
    Console.WriteLine();
}

我怀疑您会在输出中看到 00A3,它是井号的 Unicode。这意味着字符串实际上已经很好地到达了您的客户端 - 但是将其写入控制台失败了。

【讨论】:

  • 我刚刚使用了 Fiddler 并发布了响应。有什么想法吗,大师? :-)
  • 我在Fiddler中发现,内容正确显示为英镑,但是在我得到的字符串返回值中,内容是?? (我将其转储到控制台并查看??)。
  • 我发现美元符号可以正确显示。这是否意味着默认编码 UTF-8 不适用于英镑但适用于美元? :-)
  • $ 是 ASCII 的一部分,而井号不是。我已经编辑了我的答案 - 我强烈怀疑这只是你的控制台而不是 Web 服务客户端,但我给了你一些代码来检查。
  • 乔恩,我已经按照你的解决方案进行了调试,它显示为 003F 003F 表示 ??,而不是 003A。有什么想法吗?
猜你喜欢
  • 2019-03-31
  • 1970-01-01
  • 2011-05-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多