کلیدستان

نسخه‌ی کامل: مشکل فارسی نوشتن در mysql (برنامه نویسی اندروید)
شما در حال مشاهده نسخه آرشیو هستید. برای مشاهده نسخه کامل کلیک کنید.
سلام دوستان  من میخوام که یه سری اطلاعات رو از طریق برنامه به دیتابیسم اضافه کنم مشکلم اینجاست که وقتی اطلاعات فارسی باشه اطلاعات به صورت
یه سری کد ناخوانا توی  دیتا بیس ذخیره میشن  . و وفتی میخوام با json بگیرمشون توی مرورگر درست دیده میشه ولی برنامه دوباره به همین صورت کدناخوانا دریافت میکنه
اینم کدهای نوشته شدمه
این کد وارد کردن اطلاعات توی db

کد:
class BackgroundTask extends AsyncTask<String,Void,String>{
     String add_info_url;
       @Override
       protected void onPreExecute() {
         add_info_url= "http://develop-your-app.comlu.com/add_info.php";
       }

       @Override
       protected String doInBackground(String... params) {
           ConnectivityManager manager = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
           NetworkInfo in = manager.getActiveNetworkInfo();
           if(in!=null && in.isConnected()){
               String name,mobile,email;
               name=params[0];
               email=params[1];
               mobile=params[2];
               try {
                   URL uRl = new URL(add_info_url);
                   HttpURLConnection connection = (HttpURLConnection) uRl.openConnection();
                   connection.setRequestMethod("POST");
                   connection.setDoOutput(true);
                   OutputStream outputStream = connection.getOutputStream();
                   BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream,"UTf-8"));
                   String data_String= URLEncoder.encode("name","UTf-8")+"="+URLEncoder.encode(name,"UTf-8")+"&"+
                           URLEncoder.encode("email","UTf-8")+"="+URLEncoder.encode(email,"UTf-8")+"&"+
                           URLEncoder.encode("mobile","UTf-8")+"="+URLEncoder.encode(mobile,"UTf-8");
                   bufferedWriter.write(data_String);
                   bufferedWriter.flush();
                   bufferedWriter.close();
                   outputStream.close();
                   InputStream inputStream =connection.getInputStream();
                   inputStream.close();
                   connection.disconnect();
                   return "one roew of data inseted";
               } catch (MalformedURLException e) {
                   e.printStackTrace();
               } catch (IOException e) {
                   e.printStackTrace();
               }

           {

            return "you are not connected";
       }

این قطعه کد پی اچ پی واسه اضافه کردن دیتا

کد:
<?php
require "init.php";
$name=$_POST["name"];
$email=$_POST["email"];
$mobile=$_POST["mobile"];
$sql="insert into product_info values('$name','$email','$mobile');";
if(mysqli_query($con,$sql))
{
    echo "<br><h3> one row inserted </h3>";
}else {
    echo "Error in insetion .... ". mysqli_errno($con);
}
?>

این قطعه کد مربوط به تبدیلشون به json

کد پی‌اچ‌پی:
<?php
$host 
"mysql12.000webhost.com";
$user "?????";
$password ="?????";
$db="a8503974_hamid";
$sql "select * from product_info;";
$con=mysqli_connect($host,$user,$password,$db);
$result=mysqli_query($con,$sql);
$response=array();
while(
$row mysqli_fetch_array($result))
{
    
array_push($response,array("name"=>$row[0],"email"=>$row[1],"mobile"=>$row[2]));
}
echo 
json_encode(array("server_response"=>$response) );
mysqli_close($con);


?>

و اینم قطعه کد واسه دریافتشون تو برنامه

کد:
     protected void onPreExecute() {
           Json_url = "http://develop-your-app.comlu.com/json_get_data.php";
       }

       @Override
       protected String doInBackground(Void... params) {
           try {
               URL url = new URL(Json_url);
               HttpURLConnection connection = (HttpURLConnection) url.openConnection();
               InputStream inputStream = connection.getInputStream();
               BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
               StringBuilder stringBuilder = new StringBuilder();
               while ((JsonString = bufferedReader.readLine()) != null) {
                   stringBuilder.append(JsonString + "\n");
               }
               bufferedReader.close();
               inputStream.close();
               connection.disconnect();
               return stringBuilder.toString().trim();
           } catch (MalformedURLException e) {
               e.printStackTrace();
           } catch (IOException e) {
               e.printStackTrace();
           }
           return null;
       }

حقیقت کار کردن با php رو تازه شروع کردم و فکر میکنم مشکل از کدای php هستش .. ممنوم میشم رو همین قطعه کد راهنماییم کنید
سلام.
با توجه به اینکه گفتید نمایش خروجی صفحه بر اساس ساختار json (خروجی به صورت نمایش متن ذخیره شده در پایگاه داده)، در مرورگر اینترنت به درستی نمایش داده می شود، بنابراین مراحل ارسال اطلاعات به سرور، ذخیره در پایگاه داده و بعد ایجاد ساختار در خروجی صفحه، به درستی اجرا شده اند و تنها هنگامی که اطلاعات از صفحه موجود در سرور اینترنتی، دریافت شده و در برنامه اندروید نمایش داده می شوند، کاراکترهای فارسی مشکل دارند.
بنابراین توصیه می کنم کلید زیر را بخوانید :

کلید شماره 292

البته بخش مربوط به پردازش json در برنامه اندروید را ذکر نکردید (استخراج JSONObject از متن دریافت شده و پردازش و ...)، ولی به احتمال زیاد، مشکل از این مورد می باشد.

-------------------------------------------

اما اگر در سمت سرور اینترنتی به درستی ذخیره نشده باشد، باید موارد دیگری چک شوند (البته همینکه گفتید در مرورگر به درستی نمایش داده می شوند، نباید مشکلی باشد). برای چک کردن پایگاه داده، کافی است از طریق phpMyAdmin ، اطلاعات ذخیره شده در پایگاه داده و جدول های آن چک شوند (بد نیست کلید شماره 571 را در زمینه ذخیره صحیح متن های فارسی در پایگاه داده MySQL بخوانید). برای چک کردن خروجی صفحه در مرورگر اینترنت هم می توان موقتا چارچوب HTML را به صفحه اضافه کرد تا متن فارسی را به درستی در مرورگر اینترنت مشاهده نمایید (بعد باید چارچوب HTML حذف شود، در غیر این صورت، در برنامه اندروید با خطا روبرو می شویم).

Flower
دوباره سلام ادمین جان تشکر واسه پاسخت .. ولی مشکلم حل نشد .. الان من متوجه شدم که وقتی از داخل برنامه دیتا وارد میکنم  داده به صورت کد ناخوانا ذخیره میشن و توی مرورگر هم ناخوانا دیده میشه 
اما توی خود برنامه فارسی نمایش داده میشه 
حالا من یه صفحه پی اچ پی هم درست کردم به این کد که از اینجا هم بشه دیتا وارد کرد 

کد پی‌اچ‌پی:
<html>
<
head><title>Add info .... </title></head>
<
body>
 
 <form action="add_info.php" method="post">
<
table>
<
tr>
 <
td>Name :</td>
 
 <td><input type="text" name="name"/> </td>
</
tr>
<
tr>
 <
td>Email :</td>
 
 <td><input type="text" name="email"/> </td>
</
tr>
<
tr>
 <
td>Mobile :</td>
 
 <td><input type="text" name="mobile"/></td>
</
tr>
</
table
<
input type="submit" value="Submit info"/>
</
form
    
    
    
</
body>

</
html

وقتی که از این صفحه اطلاعات وارد میشه باز توی دیتا بیس به صورت کد دیده میشه ولی تو مرورگر فارسی نمایش داده میشه و توی برنامه دوباره به صورت کد دیده ذخیره میشه 
راستی اینم کد جیسون پارس داخل برنامه

کد:
       try {
           jsonObject=new JSONObject(json_String);
           jsonArray=jsonObject.getJSONArray("server_response");
           int count=0;
           String name,email,mobile;
           while (count<jsonArray.length()){
        JSONObject jo = jsonArray.getJSONObject(count);
               name=jo.getString("name");
               email=jo.getString("email");
               mobile=jo.getString("mobile");


               Contacts contacts = new Contacts(name,email,mobile);
               contactAdapter.add(contacts);
               count++;

از روشی هم که گفتین (String my_string_1 = new String(jsonObject_1.getString("name_1").getBytes("ISO-8859-1")"UTF-8");) استفاده کردم ولی باز تاثیری نداشت 
ببخشد که گیج کننده شد . الان در کل مشکل من این شد که تو دیتا بیس که کلا در دو حالت چه از برنامه دیتا اضافه شه چه از سایت  فارسی نشون داده نمیشه و وقتی از سایت دیتا وارد میشه تو برنامه اندروید فارسی دریافت نمیشه
کلید شماره 571 را با دقت بخوانید و نکات آن را رعایت کنید. تا زمانی که متن به شکل صحیح در پایگاه داده ذخیره نشده، به مراحل بعدی فکر نکنید. یعنی اولین هدفتان را بگذارید بر روی اینکه وقتی اطلاعات پایگاه داده را توسط phpMyAdmin چک می کنید، متن ها را فارسی ببینید. پس تنها این مورد را چک کنید و کدهای ذخیره اطلاعات در پایگاه داده را تصحیح کنید.
باید مشخصه collation برای ((پایگاه داده))، ((جدول های پایگاه داده)) و ((ستون هایی از هر جدول که شامل کاراکتر می باشند)) به صورت utf8_general_ci تعیین شده باشد، اگر نبود، collation آنها را تغییر بدهید. 

برای روش های به کار رفته در کد PHP برای ذخیره اطلاعات در پایگاه داده، charset را برابر UTF-8 تعیین کنید. منظورم این بخش از کدها می باشد :

کد پی‌اچ‌پی:
<?php
$host 
"mysql12.000webhost.com";
$user "?????";
$password ="?????";
$db="a8503974_hamid";
$sql "select * from product_info;";
$con=mysqli_connect($host,$user,$password,$db);
$result=mysqli_query($con,$sql);
$response=array();
while(
$row mysqli_fetch_array($result))
{
 
   array_push($response,array("name"=>$row[0],"email"=>$row[1],"mobile"=>$row[2]));
}
echo 
json_encode(array("server_response"=>$response) );
mysqli_close($con);


?>

لینک زیر را ببینید :

http://php.net/manual/en/mysqli.set-charset.php

برای نوع کدنویسی شما، کد زیر از لینک ذکر شده را باید بررسی کنید :

کد پی‌اچ‌پی:
<?php
$link 
mysqli_connect('localhost''my_user''my_password''test');

/* check connection */
if (mysqli_connect_errno()) {
 
   printf("Connect failed: %s\n"mysqli_connect_error());
 
   exit();
}

printf("Initial character set: %s\n"mysqli_character_set_name($link));

/* change character set to utf8 */
if (!mysqli_set_charset($link"utf8")) {
 
   printf("Error loading character set utf8: %s\n"mysqli_error($link));
 
   exit();
} else {
 
   printf("Current character set: %s\n"mysqli_character_set_name($link));
}

mysqli_close($link);
?>


Flower