2012-04-03 26 views
5

Tôi muốn lấy một số văn bản từ trang PHP vào ứng dụng Android. Miễn là các ký tự là ASCII (lên đến 128) thì không có vấn đề gì nhưng khi tôi muốn hiển thị các ký tự đặc biệt như 'Ţ', 'Â' (cái gọi là Latin-1 Supplement và/hoặc Latin Extended-A - xem nó tại Unicode Chart) Tôi nhận được các ký hiệu lạ vào ứng dụng Android của mình ().Ký tự đặc biệt giữa ứng dụng Android và tập lệnh PHP

Vấn đề là ứng dụng Android của tôi không thể xử lý các ký tự từ bổ sung Latin-1 (mà PHP có thể) nhưng các ký tự từ bộ ký tự mở rộng La-tinh Latinh (mà PHP không thể). Tôi không biết bộ ký tự phổ biến cho cả hai ngôn ngữ để sử dụng bởi vì ngôn ngữ Java có thể đọc PHP là không, và ngược lại.

My Java chức năng mà được nội dung của các trang PHP là thế này:

public static String GetData() { 
    byte[] Bresult = null; 
    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("var", "val")); 
     post.setEntity(new UrlEncodedFormEntity(nameValuePairs, "UTF-8")); 
     HttpResponse response = client.execute(post); 
     StatusLine statusLine = response.getStatusLine(); 
     if(statusLine.getStatusCode() == HttpURLConnection.HTTP_OK){ 
      Bresult = EntityUtils.toByteArray(response.getEntity()); 
      Result = new String(Bresult, "UTF-8"); 
     } 
    } catch (UnsupportedEncodingException e) { 
     Log.w("MYAPP", "Unsupported Encoding Exception (" + e.getMessage() + ")"); 
    } catch (Exception e) { 
     Log.w("MYAPP", "Exception (" + e.getMessage() + ") ocurred"); 
    } 
    return Result; 
} 

Vì vậy, mã này mang lại cho tôi nội dung của script.php trang. Nếu các ký tự của văn bản nhận được từ 0 đến 128 thì không có vấn đề gì. Ở những nơi khác, tôi có những nhân vật kỳ lạ.

Bây giờ, đây là mã PHP của tôi:

<?php 
    header("Content-Type: text/plain;charset=utf-8"); 
    echo "ÂŞÂĂĒ"; 
?> 

Tôi cũng có một ứng dụng C++ và nó đọc các văn bản một cách chính xác. Tôi đã thử rất nhiều phương pháp cả ngày và tôi không hiểu. Ai, ở đâu, tại sao? Cảm ơn.

+0

lẽ xem xét điều này http://stackoverflow.com/questions/4917860/android-character- mã hóa-nguyên-tài nguyên-tệp và http://stackoverflow.com/questions/3098207/how-to-set-string-character-encoding-in-android - bất kỳ trợ giúp nào ở đó? – Aerik

+0

Cảm ơn Aerik. Bây giờ tôi có thể gửi chúng chính xác từ PHP đến Android nhưng không phải từ Android đến PHP. Đang cố gắng ... – ali

Trả lời

1

có thì bạn nhận được dữ liệu ?, nếu là thông qua một cơ sở dữ liệu mysql bạn phải xác định UTF8 như thế này

mysql_query("SET NAMES 'utf8'"); 
+0

O.K. Javo. Tôi sẽ ghi nhớ điều đó khi tôi sẽ nhận được văn bản từ cơ sở dữ liệu. Bây giờ tôi chỉ muốn lấy nó từ một tập tin văn bản. Cảm ơn – ali

+1

Đảm bảo mã hóa trong tệp văn bản của bạn. Một số trình chỉnh sửa văn bản cho phép bạn xem/đặt mã hóa. Ngoài ra, tôi đề nghị điều này có lẽ ngây thơ, bạn đã xem xét mã hóa mọi thứ trong UTF-8 chưa? Android sử dụng UTF-8 (http://stackoverflow.com/questions/4564688/what-is-the-default-charset-encoding-of-text-messages-on-android-devices) và có rất nhiều tài nguyên để xử lý UTF -8 với PHP ... – Aerik

Các vấn đề liên quan