3

我目前正在开发一个具有大量服务器端通信的 Android 应用程序。昨天我收到一个错误报告,说用户无法发送(简单)特殊字符,例如 ëäï。

我搜索但没有发现任何有用的东西可能重复(没有答案): https ://stackoverflow.com/questions/12388974/android-httpurlconnection-post-special-charactes-to-rest-clint-in-android

我的相关代码:

public void execute(String method) {
        HttpsURLConnection urlConnection = null;
        try {
            URL url = new URL(this.url);
            urlConnection = (HttpsURLConnection) url.openConnection();
            urlConnection.setRequestMethod(method);
            urlConnection.setReadTimeout(30 * 1000);
            urlConnection.setDoInput(true);

            if (secure)
                urlConnection.setRequestProperty("Authorization", "Basic " + getCredentials());

            if (body != null) {
                urlConnection.setRequestProperty("Content-Type", "application/json; charset=UTF-8");


                urlConnection.setFixedLengthStreamingMode(body.length());
                urlConnection.setDoOutput(true);
                DataOutputStream dos = new DataOutputStream(urlConnection.getOutputStream());
                dos.writeBytes(body);
                dos.flush();
                dos.close();
            }

            responseCode = urlConnection.getResponseCode();
            message = urlConnection.getResponseMessage();

            InputStream in = null;

            try {
                in = new BufferedInputStream(urlConnection.getInputStream(), 2048);
            } catch (Exception e) {
                in = new BufferedInputStream(urlConnection.getErrorStream(), 2048);
            }

            if (in != null)
                response = convertStreamToString(in);

        } catch (UnknownHostException no_con) {
            responseCode = 101;
        }catch (ConnectException no_con_2){
            responseCode = 101;
        }catch(IOException io_ex){
            if(io_ex.getMessage().contains("No authentication challenges found")){
                responseCode = 401;
            }else
                responseCode = 101;
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (urlConnection != null)
                urlConnection.disconnect();
        }
    }

body是一个字符串;-)

希望我们能一起解决这个问题

更新:

试过:


writeUTF()

需要能够理解修改后的 UTF-8 的服务器


byte[] buf = body.getBytes("UTF-8");
dos.write(buf, 0, buf.length);

字符串有效,但没有特殊字符

更新:让它与 StringEntity(* string, "UTF-8") 一起工作,然后将结果解析为 byte[] 并用 dos.write(byte[]) 写入它!

--

4

3 回答 3

6

设置 StringEntity 的编码对我有用:

StringEntity entity = new StringEntity(body, "UTF-8");

在这里看到:https ://stackoverflow.com/a/5819465/570168

于 2013-04-09T12:23:56.630 回答
0

我不完全确定是否为您的情况购买此实用程序 URLEncoder.encode(string, "UTF-8")

于 2012-11-30T09:56:07.887 回答
0

我在传递带有特殊字符(ñ)的json时在android中遇到了这个问题。在我的 WebApi 方法中,[FromBody] 参数给出了 null,它似乎无法解析 json。

我通过将字节获取为 UTF-8 然后将其写入 DataOutputStream (客户端修复)来使其工作。

byte[] b = jsonString.getBytes("UTF-8");
os.write(b, 0, b.length);
于 2019-12-11T04:44:23.033 回答