2012-04-05 69 views
4

我需要你再次幫助這個。我想從Android應用程序發送特殊字符到PHP腳本,反之亦然。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發送字符串「Español」到PHP。我將該字符串存儲到一個MySQL表(UNICODE字符集)中,並正確地獲取了字符串。我也得到每個字符的整數值。結果是「Español」和「69.115.112.97.241.111.108」。所以,Android發送字符「ñ」爲241,在UNICODE Chart中定義爲「ñ」。看到它的http://www.ssec.wisc.edu/~tomw/java/unicode.html#x0080

第二招

我從PHP返回字符串到Android和,而不是讓「N」我得到的「N」。這是我迷失的地方。這種變化是什麼時候,爲什麼有相同的數值,他們是不同的?這對我來說太過分了,我請求你的幫助。提前致謝!

+0

爲什麼你不使用UTF-8? – Rufinus 2012-04-05 13:11:57

+1

在發送任何東西之前使用'base64'。我做了什麼以及它的工作 – Baba 2012-04-05 13:13:22

回答

1

使用ISO-8859-2當您創建您發送的URLEncodedEntity。您可以將其設置爲構造函數中的參數。

如果沒有指定的字符集,可能是以UTF-8/UTF-16(最常見的)方式發送服務器以不同方式解釋的數據。

編輯:看起來像ISO-8859-2不支持ñ。你可能不得不改變服務器端的東西。 http://en.wikipedia.org/wiki/ISO/IEC_8859-2

+0

O.K.人。問題解決了!謝謝!只要我被允許,我會盡快爲大家發佈解決方案。再次感謝! – ali 2012-04-05 18:14:30

0

O.K. 所以這是我的最終代碼,它的工作原理。我必須指定我的環境:API 15,安卓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"]); 
?> 

使用本C ode我可以將該字符串發送給PHP腳本,將其存儲在數據庫中和/或將其返回給Android應用程序(並按照發送它的方式接收它) 我一直在研究這個問題,並希望它能夠適用於其他Android開發人員。順便說一下,我在doInBackground()函數內部的異步類中使用了Java代碼。

感謝和再見