4

我再次需要你的帮助。我想将特殊字符从 Android 应用程序发送到 PHP 脚本,反之亦然。

安卓代码


...
HttpClient client = new DefaultHttpClient();
HttpPost post = new HttpPost("http://www.mypage.com/script.php");
try {
    List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(1);
    nameValuePairs.add(new BasicNameValuePair("value", "Español"));
    post.setEntity(new UrlEncodedFormEntity(nameValuePairs));
    HttpResponse response = client.execute(post);
    StatusLine statusLine = response.getStatusLine();
    if(statusLine.getStatusCode() == HttpURLConnection.HTTP_OK){
        InputStream inps = response.getEntity().getContent();
        InputStreamReader inp = new InputStreamReader(inps, Charset.forName("ISO-8859-2"));
        BufferedReader rd = new BufferedReader(inp);
        StringBuilder stringBuilder = new StringBuilder();
        String bufferedStrChunk = null;
        while ((bufferedStrChunk = rd.readLine()) != null) {
            stringBuilder.append(bufferedStrChunk);
        }
        Result = stringBuilder.toString();
    }...

PHP 代码


<?php
    header("Content-Type: text/plain;charset=ISO-8859-2");
    echo $_POST["value"];
?>

第一步

我正在尝试将字符串“Español”从 Android 发送到 PHP。我将字符串存储到 MySQL 表(UNICODE 字符集)中,并且正确获取了字符串。我还得到了每个字符的整数值。结果是“Español”和“69.115.112.97.241.111.108”。因此,Android 将字符“ñ”发送为 241,在 UNICODE 图表中定义为“ń”。请参阅http://www.ssec.wisc.edu/~tomw/java/unicode.html#x0080

第二步

我将字符串从 PHP 返回到 Android,而不是得到“ñ”,而是得到“ń”。这是我迷路的地方。这种情况什么时候发生变化,为什么具有相同的数值它们是不同的?这对我来说太多了,我请求你的帮助。提前致谢!

4

2 回答 2

1

创建发送的文件时使用ISO-8859-2 。URLEncodedEntity您可以将其设置为构造函数中的参数。

如果没有指定的字符集,您可能会以服务器以不同方式解释的 UTF-8/UTF-16(最常见)格式发送数据。

编辑:看起来ISO-8859-2不支持ñ。您可能需要在服务器端进行一些更改。http://en.wikipedia.org/wiki/ISO/IEC_8859-2

于 2012-04-05T13:24:12.593 回答
0

好的,这是我的最终代码,它可以工作。我必须指定我的环境:API 15、Android 4.0.3

JAVA代码


...
HttpClient client = new DefaultHttpClient();
HttpPost post = new HttpPost("http://www.mypage.com/script.php");
try {
    List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(1);
    nameValuePairs.add(new BasicNameValuePair("value", "Español"));
    post.setEntity(new UrlEncodedFormEntity(nameValuePairs, "ISO-8859-2"));
    HttpResponse response = client.execute(post);
    StatusLine statusLine = response.getStatusLine();
    if(statusLine.getStatusCode() == HttpURLConnection.HTTP_OK){
        InputStream inps = response.getEntity().getContent();
        InputStreamReader inp = new InputStreamReader(inps, Charset.forName("UTF-8"));
        BufferedReader rd = new BufferedReader(inp);
        StringBuilder stringBuilder = new StringBuilder();
        String bufferedStrChunk = null;
        while ((bufferedStrChunk = rd.readLine()) != null) {
            stringBuilder.append(bufferedStrChunk);
        }
        Result = stringBuilder.toString();
    }
...

PHP代码


<?php
    header("Content-Type: text/plain;charset=UTF-8");
    echo utf8_encode($_POST["value"]);
?>

使用此代码,我可以将该字符串发送到 PHP 脚本,将其存储在数据库中和/或将其返回到 Android 应用程序(并像发送它一样接收它)我已经为此工作了几天,我希望它将对其他 Android 开发人员有用。顺便说一句,我在 doInBackground() 函数内部的异步类中使用 Java 代码。

谢谢和再见

于 2012-04-05T21:13:19.820 回答