首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android语言解析难点

Android语言解析难点
EN

Stack Overflow用户
提问于 2016-09-26 17:56:40
回答 1查看 67关注 0票数 0

在出现语言问题之前,它一直工作得很好。

但当用户名不是English时,服务器会发送错误。

这是我的代码。。。

代码语言:javascript
复制
HttpAsyncTaskCheckAuth checkAuth = new HttpAsyncTaskCheckAuth(SignUpActivity.this);
                checkAuth.execute("http://www.server_address.com//auth/login?email=" +
                        email +
                        "&name=" + name +
                        "&logged_in=" + "true");

如果我输入的名称是English,就可以正常工作。当用户输入的名称不是英文时,服务器不能成功执行。

代码语言:javascript
复制
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)

我尝试了以下方法,但这些方法对我都不起作用

代码语言:javascript
复制
URLDecoder.decode(name, "UTF-8").replaceAll(" ","%20") 

代码语言:javascript
复制
URLEncoder.encode(name, "UTF-8").replaceAll(" ","%20")

代码语言:javascript
复制
    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)
EN

回答 1

Stack Overflow用户

发布于 2016-09-26 18:39:05

您应该使用URLEncoder而不是URLDecoder。访问web源时,您的URL应该是编码的,而不是解码的

所有其他字符都是不安全的,它们首先使用某种编码方案转换为一个或多个字节。建议使用的编码方案是UTF-8。但是,出于兼容性原因,如果未指定编码,则使用平台的默认编码。

https://developer.android.com/reference/java/net/URLEncoder.html

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39699758

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档