آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

مشکل در دریافت اطلاعات از سرور (جیسون)   حل شده

goorgool  11 سال پیش  11 سال پیش
0 0

سلام

دوستان من توی دو تا هاست رایگان دیتابیس و فایل php یکسانی قرار دادم (دیتابیس و فایل php در هر دو هاست کاملاً یکسانند)

دیتابیسم هم دارای مقادیر فارسی هست و utf-8 تعریف شده

حالا وقتی از طریق جیسون اطلاعات رو از سرور اول دریافت میکنم در گوشی به درستی اطلاعات دریافت میشه و هیچ مشکلی نیست، شکل زیر : ( سرور اول gigfa هستش )

ولی وقتی اطلاعات رو از سرور دوم میگیرم یک سری کاراکترهای عجیب و غریب دریافت میکنه و میگه که این اطلاعات جیسون نیست

شکل زیر: ( سرور دوم parspack هستش که سرور ابری هست )

این هم فایل php :

 <?php
$connection=mysqli_connect("localhost", "my-user", "my_pass", "db");
if (mysqli_connect_errno())
{
echo "khata b dalile: " . mysqli_connect_error();
}
mysqli_set_charset($connection, 'utf8');
$result = mysqli_query($connection, "SELECT * FROM brands_info");
$output = array();
while($row = mysqli_fetch_array($result))
{
$record = array();
$record['brand_id'] = $row['brand_id'];
$record['brand_name_fa'] = $row['brand_name_fa'];
$record['brand_name_en'] = $row['brand_name_en'];
$record['brand_country'] = $row['brand_country'];
$record['brand_website'] = $row['brand_website'];
$output[]=$record;
}
echo json_encode($output);
mysqli_close($connection);
?>

0 0
احتمالا موقع آپلود کردن < فایل php و یا سیو کردن اون فرمت فایل رو بر اساس ASCII میزارید < اگر گزینه ایی در این مورد وجود داره سعی کنید < فایل رو Binary کنید (11 سال پیش)
0 0
خیر فرمت فایل php رو utf-8 قرار دادم (11 سال پیش)
 برای این سوال 2 پاسخ وجود دارد.
پاسخ به سوال 
Sajad HP  11 سال پیش
0 0

بعد از دستور if  در کد بالا کد خط بعد را پاک کنید و این خط را به جای ان اضافه کنید :

 mysqli_query($connection,"SET NAMES 'utf8'");

و در انتهای کد شما به ورودی های تابع json_encode ورودی زیر را اضافه کنید 

 echo json_encode($output,JSON_UNESCAPED_UNICODE);

تست کنید اطلاع بدید.

0 0
سلام دوست عزیز مشکل حل نشد ولی من headerهایی که از سمت سرور میاد رو بررسی کردم و متوجه شدم که سرور اول Content-Encoding را null برمیگردونه ولی سرور دوم که دچار مشکله Content-Encoding را gzip برمیگردونه و فکر میکنم مشکل از همینجا باشه حالا من در فایل php هر چی سعی میکنم مقدار Content-Encoding را توسط header درست برگردونم ، باز هم gzip برمیگردونه، حالا من نمیدونم من کد رو اشتباه مینویسم که تغییری نمیکنه یا چیز دیگه ایه (11 سال پیش)
+1 0
کدتون رو سمت php چک کنید ببنید درست نمایش میده محتوی json رو یا نه اگر درست هست پس باید بررسی کنید ببنید در وب سرویس از چه کد های استفاده کردید . (11 سال پیش)
0 0
بله درست هست چون که وقتی از طریق httpUrlConnection بهش وصل میشم اطلاعات درست رو برمیگردونه و مشکلی نیست. ولی وقتی از طریق httpClient بهش وصل میشم این مشکل پیش میاد. (11 سال پیش)
پاسخ به سوال 
goorgool  11 سال پیش
0 0

دوستان من چک کردم دیدم وقتی با httpUrlConnection به این سرور وصل میشم اطلاعات رو به درستی برمیگردونه (همچنین مقدار Content-Encoding که سرور برمیگردونه null هست) ولی وقتی با httpClient وصل میشم همین مشکل بالا پیش میاد و میگه جیسون نیست (و مقدار Content-Encoding ک سرور برمیگردونه gzip هست)

متد inputstreamToString که همان متد استاد هست:

  public static String inputstreamToString(InputStream inputStream)
{
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
StringBuilder builder = new StringBuilder();

try {
String line;
while ((line = reader.readLine()) != null)
{
builder.append(line);
}
return builder.toString();
}
catch (IOException e) {
e.printStackTrace();
}
return null;

}

کد httpClient :

 public static String readUrlJsonClient(String url)
{
HttpClient client = new DefaultHttpClient();
HttpGet httpGet = new HttpGet(url);
httpGet.setHeader("User-Agent", G.USER_AGENT);

try {
HttpResponse response = client.execute(httpGet);
Header[] header= response.getAllHeaders(); // headerhaie daryafti az server
for (int i = 0; i < header.length; i++)
{
Log.i("mytag", header[i].getName() + ":" + header[i].getValue());
}
code = response.getStatusLine().getStatusCode();
HttpEntity entity = response.getEntity();
Log.i("mytag", "3 ContentEncoding: " + entity.getContentEncoding()); // daryafte header
Log.i("mytag", "3 ContentType: " + entity.getContentType()); // daryafre header
InputStream stream = entity.getContent();
String result = inputstreamToString(stream);
return result;

}
catch (ClientProtocolException e) {
e.printStackTrace();
}
catch (IOException e) {
e.printStackTrace();
}
return "";
}

کد HttpUrlConnection :

 public static String readUrlJsonUrlConnection(String url)
{
try {
URL url1 = new URL(url);
HttpURLConnection connection = (HttpURLConnection) url1.openConnection();
connection.setRequestProperty("User-Agent", G.USER_AGENT);
connection.setRequestMethod("GET");
connection.setDoOutput(true);
connection.connect();

for (String header: connection.getHeaderFields().keySet()) { // headerhaie daryafti az server
if (header != null) {
for (String value: connection.getHeaderFields().get(header)) {
Log.i("mytag", "2: " + header + ":" + value);
}
}
}
Log.i("mytag", " ContentEncoding:" + connection.getContentEncoding()); // daryafte header
Log.i("mytag", " ContentType:" + connection.getContentType()); // daryafte header
Log.i("mytag", " Date:" + connection.getDate()); // daryafte header
Log.i("mytag", " LastModified():" + connection.getLastModified()); // daryafte header
code = connection.getResponseCode();
InputStream stream = connection.getInputStream();
String result = Tavabe.inputstreamToString(stream);

return result;
}
catch (IOException e) {
e.printStackTrace();
}
return "";
}
0 0
دوستان مشکل حل شد. (11 سال پیش)

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .