C# 如何解决 POST 表单中的中文乱码问题?

一个爬虫项目,需要以 POST 方式获取结果页面。
Chrome 查看 POST 过程,发现其中的中文表单内容变成了方块乱码:������,当然,浏览器可以正确的发送请求获取结果(这不是废话。。。)
然后我用代码模拟 POST 请求,发现只要表单出现中文,就无法获取正确的结果(结果总是为 0,因为查询乱码,网站的服务器肯定找不到乱码对应的结果啊)
请问要如何解决乱码问题?

阅读 4k
1 个回答

找到解决方法了,使用 ByteArrayContent 而不是 StringContent。

var content = new MultipartFormDataContent();

foreach (var item in formData)
{
    content.Add(new ByteArrayContent(HttpEncodingHelper.UTF8ToGB2312(item.Value)/*转码*/), item.Key);
}

转码方法:
public static byte[] StringToBytes(string s, string srcEncoding, string dstEncoding)
{
    var fromEcoding = Encoding.GetEncoding(srcEncoding);
    var toEcoding = Encoding.GetEncoding(dstEncoding);
    byte[] fromBytes = fromEcoding.GetBytes(s);
    byte[] toBytes = Encoding.Convert(fromEcoding, toEcoding, fromBytes);

    return toBytes;
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题