解决在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 正文
如何在 moya 中通过 POST 请求传递 JSON 正文