2013-09-25 32 views
3

我做了一個應用程序,從android發送很少的文本輸入到我的在線數據庫。我的應用程序運行良好,但有些用戶報告說他們不能使用阿拉伯文字。所以,我想,當我在數據庫中發送阿拉伯文文本顯示爲????? ????? ??????從Android手機發送阿拉伯文字到在線MySQl數據庫

我的PHP腳本:

<?php 
$connect = mysql_connect($db_host,$db_uid,$db_pass) or die('could not connect'); 
mysql_select_db($db_name); 

if(mysql_errno($connect)) 
{ 
die("Failed to connect to MySQL: " . mysql_error()); 
} 
else 
{ 
    echo "success"; 
mysql_query("SET NAMES 'utf8'"); mysql_query('SET CHARACTER SET utf8'); 
} 

$name = isset($_POST['name']) ? $_POST['name'] : ''; 
$sex = isset($_POST['sex']) ? $_POST['sex'] : ''; 
$nationality = isset($_POST['nationality']) ? $_POST['nationality'] : ''; 

$query = mysql_query("insert into people (name, sex, nationality) values (N'$name' ,N'$sex', N'$nationality') ", $connect); 

print_r($_POST); 
if(!$query) echo mysql_error(); 
mysql_close($connect); 
?> 

我的Android代碼:

   DefaultHttpClient httpclient= new DefaultHttpClient(); 
       HttpPost httppost = new HttpPost("http://www.xxxxxxxx.com/thescript.php"); 
       Log.e("done 1st","its here"); 

       try 
       { 
        ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(); 
        nameValuePairs.add(new BasicNameValuePair("name", Name.getText().toString())); 
        nameValuePairs.add(new BasicNameValuePair("sex", Sex.getText().toString())); 
        nameValuePairs.add(new BasicNameValuePair("nationality", Nationality.getText().toString())); 

        httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 
        HttpResponse response = httpclient.execute(httppost); 
        Log.e("done", String.valueOf(response)); 
       } 

我試過幾個的東西,你可以看到但沒有工作。

,並使用插入時到使用在線PC .PHP我得到這樣的:لببي

---------

我的數據庫設置爲:

表格整理utf8_general_ci 及其MyISAM

collumns(姓名,性別,國籍)裏面:

類型varchar覈對utf8_general_ci

離。 輸出應該是علي但它???

+0

嘗試從您的瀏覽器插入並再次看到它,如果該檢查沒有問題,請檢查您的Android應用程序。 –

+0

你應該知道這一點比我好,我只是建議的東西,它很容易就 –

+0

我使用的瀏覽器捆綁,並得到這樣的:U「ببي –

回答

2

做這樣

DefaultHttpClient httpclient= new DefaultHttpClient(); 
       HttpPost httppost = new HttpPost("http://www.xxxxxxxx.com/thescript.php"); 
       Log.e("done 1st","its here"); 

       try 
       { 
        ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(); 
        nameValuePairs.add(new BasicNameValuePair("name", Name.getText().toString())); 
        nameValuePairs.add(new BasicNameValuePair("sex", Sex.getText().toString())); 
        nameValuePairs.add(new BasicNameValuePair("nationality", Nationality.getText().toString())); 

        httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs, "UTF-8")); //UPDATE HERE 
        HttpResponse response = httpclient.execute(httppost); 
        Log.e("done", String.valueOf(response)); 
       } 
+0

它正在工作。你把我的項目帶回來了,我放棄了,然後你把它帶回來了!!!!!謝謝!!!!! –

0

你應該改變你的表的排序規則utf8_general_ci或其他任何Unicode排序規則。 Latin1不能代表阿拉伯文字。

+0

我改變了他們仍然不能正常工作 –

1

類型不應該是varchar,因爲它不接受Unicode字符。將它更新到nvarchar!

和Andries一樣,排序規則應該設置爲utf8_general_ci或其他Unicode排序規則。

編輯:

所以,既然你是在MySQL V5.x中,你應該有一個配置文件(如my.cnf中)。您應該確保您沒有使用超級用戶訪問數據庫。將此添加到您的配置文件。

[mysqld] 
init_connect='SET collation_connection = utf8_general_ci; SET NAMES utf8;' 
default-character-set=utf8 
character-set-server=utf8 
collation-server=utf8_general_ci 

這將觸發任何連接以使用utf8_general_ci進行任何連接。

重新啓動MySQL,如果mysqld.log沒有返回任何錯誤,你應該集結!

+0

,所以我創建一個文件稱爲「my.cnf」並在其中發佈代碼?那麼什麼?我在哪裏放置文件? –

+0

您不必創建該文件,您應該在MySQL安裝目錄中創建該文件。只需追加該代碼即可。 – Vereos

+0

我不,因爲我使用虛擬主機。 –

1

我相信你的java代碼是正確的。

在後端,嘗試使用此代碼:(如果你可以切換到PDO)

$conn= mysql_connect($db_host,$db_uid,$db_pass, true) or die('could not connect'); 
mysql_select_db($db_name); 
mysql_query("SET character_set_results = 'utf8', character_set_client = 'utf8', character_set_connection = 'utf8', character_set_database = 'utf8', character_set_server = 'utf8'", $conn); 
mysql_set_charset('utf8', $conn); 

調試使用知道編碼:

<?php 
$charset = mysql_client_encoding($conn); 
echo "The current character set is: $charset\n"; 
?> 

然後

執行以下命令作爲根:

ALTER DATABASE YOUR_DATABASE_ NAME CHARACTER SET utf8 COLLATE utf8_general_ci; 
update mysql.proc set character_set_client = "utf8", collation_connection = "utf8_general_ci", db_collation = "utf8"; 

然後在following SO answer

+0

我現在得到:**當前字符集是:UTF8 successArray()**,仍然阿拉伯文文本???????? –

+0

嘗試「** **。然後」在回答 –

+0

我使用phpMyAdmin的SQL選項卡,執行它因爲我是?使用000webhost的 –

0

您需要正確的(UTF-8)字符集傳遞給你的UrlEncodedFormEntity構造函數執行代碼。

+0

你可以怎麼做我該怎麼做? –

+0

@JohnJared吧?類似於'httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs,Charset.forName(「UTF-8」)));' - 你可能需要通過將它包裝在try..catch塊中來擺脫潛在的異常。 –

+0

我得到**類型HttpEntityEnclosingRequestBase中的方法setEntity(HttpEntity)不適用於來自.setentity –

0

我有這個問題了一個星期時間長,找啊找,那@biraj在解決這個問題的唯一辦法建議的解決方案!無需更改數據庫或在PHP中設置UTF-8或.... 使用這種

httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs, "UTF-8")); 

而這個問題是一去不復返了。

相關問題