解决在Unity3D中通过Post向服务器提交请求,表单中带有中文导致的乱码问题!

Posted 阶梯之上

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了解决在Unity3D中通过Post向服务器提交请求,表单中带有中文导致的乱码问题!相关的知识,希望对你有一定的参考价值。

此方法只能在PC端使用,在移动端无效,若想要解决中文乱码问题,可以把项目升级到5.3以后,并使用Unity自带的UnityWebRequest的Get方法,大致框架如下:

UnityWebRequest webRequest = UnityWebRequest.Get(data);
yield return webRequest.Send();
if (webRequest.error != null)


else

    string returnMessage = webRequest.downloadHandler.text;

webRequest.Abort();


好久没写博客了,最近公司比较忙,今天熬夜解决了一个问题,很有成就感,网上相关资料比较少,所以我打算写下来分享出来。

这个功能是公司的需求,就是要实现中文账号登录的功能,最初的写法就是用的unity自带的www功能,简单几行就可以实现post请求,缺点就是unity自带的www无法实现编码转换。所以是不支持中文账号提交的。实现代码如下:

void Start()
    
        StartCoroutine(DoPost());
    

    IEnumerator DoPost()
    
        WWWForm form = new WWWForm();
        form.AddField("weixinid","admin");
        form.AddField("pwd","1234567");
        WWW www = new WWW("http://192.168.1.1/EntryformServlet", form);
        yield return www;
        if (www.error == null)
        
            Debug.Log(www.text);
        
        else
        
            Debug.Log(www.error.ToString());
        
    
刚刚已经说了如果使用上面的方法,如果表单中传入的是中文,那么服务器接收到的是乱码,这个肯定是不行的。那怎么做呢,就是使用C#自带的HttpWebRequest函数。

废话少数,代码送上。

    void Start()
    
        Debug.Log(PostWebRequest("http://192.168.1.1/EntryformServlet", "weixinid=测试&pwd=1234567" ));
    
   
    private string PostWebRequest(string postUrl, string paramData)
    
        // 把字符串转换为bype数组
        byte[] bytes = Encoding.GetEncoding("gb2312").GetBytes(paramData);
       
        HttpWebRequest webReq = (HttpWebRequest) WebRequest.Create(new Uri(postUrl));
        webReq.Method = "POST";
        webReq.ContentType = "application/x-www-form-urlencoded;charset=gb2312";
        webReq.ContentLength = bytes.Length;
        using (Stream newStream = webReq.GetRequestStream())
        
            newStream.Write(bytes, 0, bytes.Length);
        
        using (WebResponse res = webReq.GetResponse())
        
            //在这里对接收到的页面内容进行处理
            Stream responseStream = res.GetResponseStream();
            StreamReader streamReader = new StreamReader(responseStream, Encoding.GetEncoding("UTF-8"));
            string str = streamReader.ReadToEnd();
            streamReader.Close();
            responseStream.Close();
            //返回:服务器响应流 
            return str;
        
    

从上面的代码可以看出, POST 中文数据的时候,先使用 UrlEncode 方法将中文字符转换为编码后的 ASCII 码,然后提交到服务器,提交的时候可以说明编码的方式,用来使对方服务器能够正确的解析。

以上是关于解决在Unity3D中通过Post向服务器提交请求,表单中带有中文导致的乱码问题!的主要内容,如果未能解决你的问题,请参考以下文章

在 Android 的 OKhttp 中通过 POST 请求发送 JSON 正文

如何在浏览器中通过 POST 请求加载外国图像?

如何在 moya 中通过 POST 请求传递 JSON 正文

如何在 Vuex 中通过 POST 请求发送状态数据?

asp.net 发布到IIS后,Get提交会出现413错误,请求内容过大,不想改成post提交,请问该怎么解决

在 C# 中通过 POST 发送 JSON 并接收返回的 JSON?