Fiddler 显示中文为问号
Fiddler shows Chinese as question marks
我正在使用 C# 和 Fiddler 测试 Web 服务。我的数据库存储了中文文本..在我的调试器中我可以看到中文文本存储在 c# 变量 FINE 中,但是当我 post 使用 c# 的请求并在 fiddler 中调试它时,fiddler 将文本显示为问号 ( ???)。这是为什么?因此我的网络服务也将其视为 ????.
这是我的代码示例
public confirmationStatus Send(string phoneNumber, string text)
{
messages_send model = new messages_send() { contacts = new List<string>() { phoneNumber }, text=text };
string url = this.setupUrl();
string dataToSend = new JavaScriptSerializer().Serialize(model);
var cli = new WebClient();
cli.Headers[HttpRequestHeader.ContentType] = "application/json;charset=utf-8";
string response = cli.UploadString(url, dataToSend);
return new JavaScriptSerializer().Deserialize<confirmationStatus>(response);
}
这就是 Fiddler 的看法。
POST https://api.***.com/v1/messages? HTTP/1.1
Content-Type: application/json
Host: api.**.com
Content-Length: 1061
Expect: 100-continue
Connection: Keep-Alive
{"contacts":["+1*****9"],"text":"**??HME??????** John,??? 01-01-0001 ???? 12:00 AM ? 12:00 AM? ????????????????????: Link: https://www.****.com/timesheets/?v=0 .Text STOP "}
问题是,.NET 默认将字符串编码为 UTF-16。因此 Fiddler 和我的网络服务无法正确编码并显示问号。
更改 HTTP 的 ContentType Headers 没有成功。我更改了 WebClient 的编码 object,它起作用了。
因此我的答案是...
var cli = new WebClient();
cli.Encoding = Encoding.UTF8;
在 .NET 中,我们可以更改流的编码,所以我相信这就是它起作用的原因。
我正在使用 C# 和 Fiddler 测试 Web 服务。我的数据库存储了中文文本..在我的调试器中我可以看到中文文本存储在 c# 变量 FINE 中,但是当我 post 使用 c# 的请求并在 fiddler 中调试它时,fiddler 将文本显示为问号 ( ???)。这是为什么?因此我的网络服务也将其视为 ????.
这是我的代码示例
public confirmationStatus Send(string phoneNumber, string text)
{
messages_send model = new messages_send() { contacts = new List<string>() { phoneNumber }, text=text };
string url = this.setupUrl();
string dataToSend = new JavaScriptSerializer().Serialize(model);
var cli = new WebClient();
cli.Headers[HttpRequestHeader.ContentType] = "application/json;charset=utf-8";
string response = cli.UploadString(url, dataToSend);
return new JavaScriptSerializer().Deserialize<confirmationStatus>(response);
}
这就是 Fiddler 的看法。
POST https://api.***.com/v1/messages? HTTP/1.1
Content-Type: application/json
Host: api.**.com
Content-Length: 1061
Expect: 100-continue
Connection: Keep-Alive
{"contacts":["+1*****9"],"text":"**??HME??????** John,??? 01-01-0001 ???? 12:00 AM ? 12:00 AM? ????????????????????: Link: https://www.****.com/timesheets/?v=0 .Text STOP "}
问题是,.NET 默认将字符串编码为 UTF-16。因此 Fiddler 和我的网络服务无法正确编码并显示问号。
更改 HTTP 的 ContentType Headers 没有成功。我更改了 WebClient 的编码 object,它起作用了。
因此我的答案是...
var cli = new WebClient(); cli.Encoding = Encoding.UTF8;
在 .NET 中,我们可以更改流的编码,所以我相信这就是它起作用的原因。