提琴手显示中文为问号

时间:2018-06-20 21:15:10

标签: c# asp.net fiddler multilingual

我正在使用C#和Fiddler测试Web服务。我的数据库中存储了中文文本..在调试器中,我可以看到中文文本存储到ac#变量FINE中,但是当我使用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);

}

这就是提琴手的看法。

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                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     "}

1 个答案:

答案 0 :(得分:2)

问题是,.NET默认将字符串编码为UTF-16。因此Fiddler和我的Web服务无法对其正确编码并显示问号。

更改HTTP标头的ContentType不能解决问题。我更改了WebClient对象的编码,并且可以正常工作。

因此对我来说答案是...

        var cli = new WebClient();
        cli.Encoding = Encoding.UTF8;

在.NET中,我们可以更改流的编码,因此我相信这就是它起作用的原因。