4

これについてもまたあなたの助けが必要です。AndroidアプリケーションからPHPスクリプトに、またはその逆に特殊文字を送信したい。

Androidコード


...
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"];
?>

最初の動き

AndroidからPHPに文字列「Español」を送信しようとしています。文字列をMySQLテーブル(UNICODE文字セット)に保存すると、文字列が正しく取得されます。各文字の整数値も取得します。結果は「Español」と「69.115.112.97.241.111.108」です。したがって、Androidは文字「ñ」を241として送信します。これは、UNICODEチャートでは「ń」として定義されています。http://www.ssec.wisc.edu/~tomw/java/unicode.html#x0080でそれを参照してください

2番目の動き

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

OKこれが私の最終的なコードであり、機能します。環境を指定する必要があります: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 に答える