我正在开发基于ASP.Net asmx web服务的Web服务。服务器端将响应byte []到以UTF-8编码的客户端,客户端将byte []转换为字符串。
我的困惑是,服务器端的英镑字符(我在写入Http响应之前转储,服务器端的字符是正确的英镑)将被收到?从客户端。
任何想法有什么不对?我怀疑它是编码问题,但我不知道如何进一步调试和任何设置(客户端Web服务代理的设置?)会影响?
提前谢谢, 乔治以下是我从Fiddler那里得到的标题部分。
HTTP / 1.1 200好的 日期:2009年2月20日星期五16:51:30 GMT 服务器:Microsoft-IIS / 6.0 缓存控制:无缓存 编译指示:无缓存 X-Powered-By:ASP.NET X-AspNet-版本:2.0.50727 缓存控制:私有 内容类型:text / xml 内容长度:22752
xml version =“1.0”encoding =“utf-8”
答案 0 :(得分: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。这意味着该字符串实际上已经达到了您的客户端 - 但是将其写入控制台失败了。