在出现语言问题之前,它一直工作得很好。
但当用户名不是English时,服务器会发送错误。
这是我的代码。。。
HttpAsyncTaskCheckAuth checkAuth = new HttpAsyncTaskCheckAuth(SignUpActivity.this);
checkAuth.execute("http://www.server_address.com//auth/login?email=" +
email +
"&name=" + name +
"&logged_in=" + "true");如果我输入的名称是English,就可以正常工作。当用户输入的名称不是英文时,服务器不能成功执行。
09-26 16:09:34.567 3838-3838/package_name W/System.err: org.json.JSONException: Value Traceback of type java.lang.String cannot be converted to JSONArray
09-26 16:09:34.567 3838-3838/package_name W/System.err: at org.json.JSON.typeMismatch(JSON.java:111)
09-26 16:09:34.567 3838-3838/package_name W/System.err: at org.json.JSONArray.<init>(JSONArray.java:96)
09-26 16:09:34.567 3838-3838/package_name W/System.err: at org.json.JSONArray.<init>(JSONArray.java:108)
09-26 16:09:34.567 3838-3838/package_name W/System.err: at package_name.asyncTask.HttpAsyncTaskCheckAuth.onPostExecute(HttpAsyncTaskCheckAuth.java:53)
09-26 16:09:34.567 3838-3838/package_name W/System.err: at package_name.asyncTask.HttpAsyncTaskCheckAuth.onPostExecute(HttpAsyncTaskCheckAuth.java:18)
09-26 16:09:34.567 3838-3838/package_name W/System.err: at android.os.AsyncTask.finish(AsyncTask.java:636)
09-26 16:09:34.567 3838-3838/package_name W/System.err: at android.os.AsyncTask.access$500(AsyncTask.java:177)
09-26 16:09:34.567 3838-3838/package_name W/System.err: at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:653)
09-26 16:09:34.567 3838-3838/package_name W/System.err: at android.os.Handler.dispatchMessage(Handler.java:102)
09-26 16:09:34.567 3838-3838/package_name W/System.err: at android.os.Looper.loop(Looper.java:145)
09-26 16:09:34.567 3838-3838/package_name W/System.err: at android.app.ActivityThread.main(ActivityThread.java:6856)
09-26 16:09:34.567 3838-3838/package_name W/System.err: at java.lang.reflect.Method.invoke(Native Method)
09-26 16:09:34.567 3838-3838/package_name W/System.err: at java.lang.reflect.Method.invoke(Method.java:372)
09-26 16:09:34.567 3838-3838/package_name W/System.err: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1404)
09-26 16:09:34.567 3838-3838/package_name W/System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199)我尝试了以下方法,但这些方法对我都不起作用
URLDecoder.decode(name, "UTF-8").replaceAll(" ","%20") 和
URLEncoder.encode(name, "UTF-8").replaceAll(" ","%20") Traceback (most recent call last):
File "/usr/local/lib/python2.7/dist-packages/tornado/web.py", line 1401, in _stack_context_handle_exception
raise_exc_info((type, value, traceback))
File "/usr/local/lib/python2.7/dist-packages/tornado/stack_context.py", line 314, in wrapped
ret = fn(*args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/tornado/web.py", line 1613, in future_complete
f.result()
File "/usr/local/lib/python2.7/dist-packages/tornado/concurrent.py", line 232, in result
raise_exc_info(self._exc_info)
File "/usr/local/lib/python2.7/dist-packages/tornado/gen.py", line 282, in wrapper
yielded = next(result)
File "startup.py", line 15884, in get
print user["name"]
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-6: ordinal not in range(128)发布于 2016-09-26 18:39:05
您应该使用URLEncoder而不是URLDecoder。访问web源时,您的URL应该是编码的,而不是解码的。
所有其他字符都是不安全的,它们首先使用某种编码方案转换为一个或多个字节。建议使用的编码方案是UTF-8。但是,出于兼容性原因,如果未指定编码,则使用平台的默认编码。
https://developer.android.com/reference/java/net/URLEncoder.html
https://stackoverflow.com/questions/39699758
复制相似问题