0

我正在用 android 和 PHP 做一些实验,移动设备是一个客户端,它通过一种HTTP POST方法向 PHP 发布一些代码。我正在使用以下代码:

            URL url = new URL(host + webapp + syncURL);

            HttpURLConnection con = (HttpURLConnection) url.openConnection();
            con.setRequestMethod("POST");
            con.setRequestProperty("Accept-Charset", "UTF-8");
            con.setFixedLengthStreamingMode(postParams.getBytes().length);
            con.setRequestProperty("Content-Type", "application/x-www-form-urlencoded; charset=utf-8");

            con.setDoOutput(true);

            //send the POST out
            PrintWriter out = new PrintWriter(con.getOutputStream());
            out.print(postParams);
            out.close();

该变量postParams采用以下形式:

Parámetros: hora=22%3A15%3A02&precision=25.1520004272461&fecha=2013-09-18&data=%5B%22S%C3%AD%22%5D

原始数据作为键值存储在对象中hora=22:15:02,precision=25.1520004272461,fecha=2013-09-18data=["Sí"]Map

为了转换地图, postParams我使用以下代码:

        StringBuilder parametersAsQueryString = new StringBuilder();
        try {
            if (parameters != null) {
                boolean firstParameter = true;

                for (String parameterName : parameters.keySet()) {
                    if (!firstParameter) {
                        parametersAsQueryString.append(PARAMETER_DELIMITER);
                    }

                    Log.d(LOG_TAG, "Parámetro: " + parameterName + ", value: " + parameters.get(parameterName));

                    // Agregamos el nombre del parámetro
                    parametersAsQueryString.append(parameterName).append(PARAMETER_EQUALS_CHAR);

                    // Agregamos el valor del parámetro
                    try {
                        parametersAsQueryString
                            .append(URLEncoder.encode(parameters.get(parameterName), "UTF-8"));
                    } catch(NullPointerException npe) {
                        parametersAsQueryString
                                .append(URLEncoder.encode("", "UTF-8"));
                    }

                    firstParameter = false;
                }
            }
        } catch (UnsupportedEncodingException uee) {
            Log.d(LOG_TAG, "Error: " + uee);

但是,在数据库中的数据显示为["Sí"]. 该数据库是一个PostgreSQL带有 encoding的数据库UTF-8,所以我认为问题不存在。有人可以帮助我吗?提前致谢。

4

2 回答 2

1

也许特殊字符在 android-to-webservice 中是不允许的,反之亦然。

如果您有任何特殊字符/字母,则需要将其替换为相应的转义字符序列。 看看这里

我对一些法语字符也有同样的问题,例如á,我通过替换解决了á\u00e1

例如,如果您想打印“Parámetros”,那么只需执行此操作。

String str="Parámetros";
str=str.replace("á","\u00e1");
Log.i("MyClass",str);

str现在您可以在两个平台之间传递!

于 2013-09-19T06:39:13.433 回答
1

由于 Java 中的 String 对象不处理 utf-8,您需要做的是将数据作为 byteArray 发送到 PHP,您可以使用 ByteArrayWriter 对象而不是

PrintWriter out = new PrintWriter(con.getOutputStream());

您可以使用

ByteArrayWriter = new ByteArrayWriter(con.getOutputStream());

因为在您的标头中您已经指定了 utf-8 编码,PHP 应该理解它,只需确保将数据作为字节发送

于 2013-11-08T18:11:47.950 回答