2012-04-05 2 views
4

나는이 문제에 대한 귀하의 도움이 필요합니다. 안드로이드 응용 프로그램에서 PHP 스크립트로 특수 문자를 보내고 싶습니다.안드로이드와 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 charset)에 문자열을 저장하고 문자열을 올바르게 가져옵니다. 나는 또한 각 charracter의 정수 값을 얻는다. 결과는 "Español"및 "69.115.112.97.241.111.108"입니다. 따라서 Android는 문자 "ñ"를 241으로 보내며, UNICODE 차트에서는 "ń"으로 정의됩니다. 나는 안드로이드에 대신 내가 "N"GET "N"을 얻는 PHP에서 문자열을 반환 http://www.ssec.wisc.edu/~tomw/java/unicode.html#x0080

둘째로 이동

에 그것을 참조하십시오. 여기 내가 잃어버린 곳이있다. 왜 이것이 변하고 왜 같은 숫자 값을 갖는 것이 다른가? 이것은 나에게 너무 많은 일이며 나는 당신의 도움을 요청합니다. 미리 감사드립니다!

+0

왜 UTF-8을 사용하지 않습니까? – Rufinus

+1

당신이 무엇을 보내기 전에'base64'를 사용하십시오. 내가 한 일은 – Baba

답변

1

전송할 URLEncodedEntity을 만들 때 ISO-8859-2을 사용하십시오. 이것을 생성자의 매개 변수로 설정할 수 있습니다.

지정된 charset이 없으면 서버가 다른 방식으로 해석하는 UTF-8/UTF-16 (가장 일반적인)으로 데이터를 전송할 수 있습니다.

편집는 :ISO-8859-2이 ñ를 지원하지 않는 것 같습니다. 서버 측에서 변경해야 할 수도 있습니다. http://en.wikipedia.org/wiki/ISO/IEC_8859-2

+0

O.K.입니다. 사람들. 문제 해결됨! 감사! 내가 허락하자마자 나는 모든 사람들을위한 해결책을 게시 할 것이다. 다시 한 번 감사드립니다! – ali

0

O.K. 이것이 내 마지막 코드이며 작동합니다. 이 C로 API (15), 안드로이드 4.0.3

자바 코드


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

: 내 환경을 지정해야합니다 ode PHP 스크립트에 해당 문자열을 보내고 데이터베이스에 저장하고 안드로이드 응용 프로그램에 반환 할 수 있습니다 (그리고 내가 보낸 것처럼 그것을받습니다). 나는 이것을 며칠 동안 작업 해 왔으며 앞으로도 계속 노력하겠습니다. 다른 Android 개발자에게 유용 할 것입니다. 그런데 doInBackground() 함수 내부의 비동기 클래스 내부에서 Java 코드를 사용합니다.

감사합니다.