android HttpURLConnection 中post 上传表单,在数据库中最后一个字段出现乱码

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了android HttpURLConnection 中post 上传表单,在数据库中最后一个字段出现乱码相关的知识,希望对你有一定的参考价值。

DataOutputStream out = new DataOutputStream(uRLConnection.getOutputStream());
String content = "email="+email+"&password="+password;
System.out.println("content:"+content);
out.writeBytes(content);
out.flush();
out.close();
上传两个参数
123456@qq.com 123456

在数据库中显示的是 123456@qq.com 123456� 测试发现只是在最后一个参数末尾出现冗余的乱码

参考技术A 是传到服务器,服务器乱码呢,还是存储到客户端数据库中出现乱码呢,你只上个从服务器获取数据这一小段代码根本找不到原因啊,字符编码跟服务器统一一下……最好提交个中文试试。追问

中文成功,只是在最后一个参数后会出现这种情况,现在我解决方式是增加了一个参数,那个参数我不存而已

追答

呃,好吧,也算一个方法

Android、HttpURLConnection、PUT 和 Authenticator

【中文标题】Android、HttpURLConnection、PUT 和 Authenticator【英文标题】:Android, HttpURLConnection, PUT and Authenticator 【发布时间】:2011-10-27 03:26:13 【问题描述】:
url = new URL(UPLOAD_URL);

urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setRequestMethod("PUT");
urlConnection.setRequestProperty("content-type", "application/json");
urlConnection.setFixedLengthStreamingMode(responseJSONArray.toString(2).getBytes("UTF8").length);
urlConnection.setDoInput(false);
urlConnection.setDoOutput(true);
urlConnection.setConnectTimeout(this.CONNECT_TIMEOUT);
urlConnection.connect();
OutputStream output = urlConnection.getOutputStream();
output.write(responseJSONArray.toString(2).getBytes("UTF8"));
output.close();

我之前也已经设置了身份验证器:

Authenticator.setDefault(new Authenticator()

 @Override
  protected PasswordAuthentication getPasswordAuthentication()
  
    return new PasswordAuthentication(loginNameString, passwordString.toCharArray());
  
);

我提供了正确的登录详细信息,但服务器以401 代码响应。 (虽然类似的 GET 请求有效。)除此之外,在连接和写入流的过程中不会调用方法 getPasswordAuthentication()。 (我知道这一点是因为我输入了Log.v("app", "password here")。)

这是为什么呢?

【问题讨论】:

这个问题你解决了吗? 【参考方案1】:

我无法回答为什么使用 Authenticator 不起作用,但我通常使用这种方法:

    String webPage = "http://192.168.1.1";
    String name = "admin";
    String password = "admin";

    String authString = name + ":" + password;
    byte[] authEncBytes = Base64.encodeBase64(authString.getBytes());
    String authStringEnc = new String(authEncBytes);

    URL url = new URL(webPage);
    URLConnection urlConnection = url.openConnection();
    urlConnection.setRequestProperty("Authorization", "Basic " + authStringEnc);
    InputStream is = urlConnection.getInputStream();
    InputStreamReader isr = new InputStreamReader(is);

试试看。使用基本身份验证就足够了。

【讨论】:

PUT 这只是一种请求。对于网络请求,我通常使用基本身份验证。它不适合你吗? 不,还没有。我们不知道问题出在哪里——我们会继续努力!

以上是关于android HttpURLConnection 中post 上传表单,在数据库中最后一个字段出现乱码的主要内容,如果未能解决你的问题,请参考以下文章

为啥 Android 的 HttpUrlConnection 不支持 HTTP/2?

Android中的HttpURLConnection有线记录

[Android基础]Android中使用HttpURLConnection

Android HttpUrlConnection 无法正常工作

HttpUrlConnection.getInputStream 在 Android 中返回空流

android中的HttpUrlConnection的使用之二