Soru & Cevap

Mysql verilerini json'a aktarırken Türkçe karakter sorunu

04.03.2014 - 04:36

Merhaba, Mysql, database, json'dan annlayan arkadaşlara soruyorum. Mysql'den php yardımıyla tablo verilerini json çıktısı halinde alıyorum. Verilerde türkçe karakter olunca "?" ya da "\ssd54s" gibi değerler geliyor. Bunu nasıl çözebilirim? Amacım Mysql'deki verileri listview'e çekmek. Android kodu tamam, tıkır tıkır işliyor, ama tr karakter işi bozuyor :(

1,568 Görüntülenme

9 Cevap

Sitedeki sorulara cevap verebilmek için giriş yapın ya da üye olun.

picture-24156-1540881001.jpg
adnanertorer
17.01.2019 - 11:12

Yazmış olduğunuz web serviside kontrol etmekte fayda var. Web servisin ürettiği json çıktısına encoding uygulayabilirsiniz. Örneğin .Net C# kullanıyorsanı:

Response.Clear();
Response.ContentType = "application/json; charset=utf-8"; // encoding işlemi
Response.Write(ops.distList(sp_id)); // ops.distList(sp_id) json string geri gönderir, yani siz json stringi buraya yazacaksınız
Response.End();

Umarım faydası olur

Profile picture for user sehrekustu
sehrekustu
20.07.2015 - 12:45

Aynı problemi ben de yaşadım ve benim düştüğüm hataya düşmeyin diye söylüyorum.

Veritabanına verileri manuel olarak phpMyAdmin gibi servisler kullanarak girmeyin sakın. UTF-8 leriniz falan bir işe yaramıyor öyle yaptığınızda.

Basitinden bir php script ile veritabanınıza veriyi kaydedin sonra browse edin eğer Ã¼Ã§ tarzı şeyler görüyorsanız doğru yoldasınız.

Kolay gelsin.

NOT: Çince karakterleri bile yazabilirsiniz ne Türkçesi ;)

picture-399-1379511904.jpg
halil
13.03.2014 - 12:10

Güzel bir soru olmuş

Profile picture for user coskungun
coskungun
04.03.2014 - 10:58

Merhaba Furkan,

[code]

<?php 

ob_start();

@header('Content-type: application/json; charset=utf-8');//json encode için gerekli

include ('include/configInc.php');

include ('classes/tariflerJsonClass.php');

//utf8-to-latin-converter çevirmen gerek 

$query = mysql_query ("SELECT * FROM master_tarifler");

$r = array();

while($row=mysql_fetch_array($query)){

   //oluşturmuş olduğun nesne jsontarifler

    $r[]= new jsonTarifler(cevir($row['id']), cevir($row['buyukresim']), cevir($row['icerik']), cevir($row['durum']));

}

 

function cevir($string){

    

    $gkod=array('\u0131','ý','þ','ð','Ý','Þ','ı','Ç','Åž','ÅŸ','ÄŸ','ü','ö','Ä°');

    $dkod=array('ı','ı','ş','ğ','İ','Ş','ı','Ç','Ş','ş','ğ','ü','ö','İ');

 

    $ykod=str_replace($gkod,$dkod,$string);

 

 

    return $ykod;

 

    }

 

echo json_encode($r);

 

?>

[/code]

şeklinde json çıktısını alırsan sorun yaşamassın.Burda önemli olan nokta "cevir" fonksiyonu ile bozuk gelen karakterleri düzenlemen.Ayrıca php olarak çıktı alırken karakterlerin bozuk çıkmasına aldıış etme, json android ve ios platformunda okurken düzgün okuyacaktır. 

Profile picture for user aliozdemir
aliozdemir
04.03.2014 - 08:53

Merhaba Furkan,
php kodunda şu kısmı değiştirip dene lütfen:

[code]echo  json_encode($resultArray,JSON_UNESCAPED_UNICODE); [/code]

Kolay gelsin,

Kerem Türker
29.11.2017 - 10:19
Çok teşekkür ederim :)
Gökhan Eryiğit
14.12.2016 - 12:17
Çok teşekkürler benim de işime yaradı :)))
Furkan KURT
04.03.2014 - 11:55
Çok çok teşekkürler Ali :) Çözdüm sorunu sayende ;)
Ali Özdemir
05.03.2014 - 12:07
Rica ederim Faruk, ne demek :)
Ali Özdemir
05.03.2014 - 12:09
** Furkan demek istedim, nedense Faruk oldu; kusura bakma. mesajı düzeltemediğim için açıklama yaptım.
picture-10515-1393665295.jpg
Oben
04.03.2014 - 08:47

Burada önceki datalar db deki dönüşüm sonrasında bozulmuş olabilirler. Benim önerim utf8-general-ci ile tabloları yaratman ve phpmyadmin den sütunların da tablo defaultu olan uf8-general-ci ile aynı olduğunu turkish de kalmadığını kontrol etmen 

Furkan KURT
04.03.2014 - 11:52
Hepsini yaptım, olmuyor.
Profile picture for user fkurt97
fkurt97
04.03.2014 - 07:46

Ali, php belgesini koyuyorum buraya, çözüm bulabilirmisin?

[code]<?php
    header('Content-Type: text/html; charset=utf-8');
    $objConnect = mysql_connect("localhost","*********","************");
mysql_query("set names 'utf8'");
    $objDB = mysql_select_db("*************");
    $strSQL = "SELECT * FROM images WHERE 1  ";
    $objQuery = mysql_query($strSQL);
    $intNumField = mysql_num_fields($objQuery);
    $resultArray = array();
    while($obResult = mysql_fetch_array($objQuery))
    {
        $arrCol = array();
        for($i=0;$i<$intNumField;$i++)
        {
            $arrCol[mysql_field_name($objQuery,$i)] = $obResult[$i];
        }
        array_push($resultArray,$arrCol);
    }
      
    mysql_close($objConnect);
    
    echo json_encode($resultArray);
?>[/code]

Profile picture for user aliozdemir
aliozdemir
04.03.2014 - 04:49

Merhaba,
Türkçe karakter sorunu için
1- MYSQL alanlarını utf8_general_ci  olarak ayarla
2- PHP kodunda MYSQL bağlantısında şunu yaz:
[code]mysql_query("set names 'utf8'");[/code]
3- PHP dosyanın title/encoding ayarını yine "utf-8" yap

çalışacaktır.

Furkan KURT
04.03.2014 - 05:05
Merhaba, dediğiniz her şeyi yaptım. ? olarak gözüken TR Karakter şimdi de "\u015" oldu. Düzelmedi?
Ali Özdemir
04.03.2014 - 05:08
php üzerinde echo veya print ile kontrol edince nasıl gözüküyor ?
Profile picture for user aliozdemir
aliozdemir
04.03.2014 - 04:38

Veritabanındaki tablonda karşılaştırma özelliğini utf8_general_ci olarak ayarla ve sonra ilgili içeriğin androide gelmeden MYSQL'de doğru gözüküp gözükmediğini kontrol  et.
 

Furkan KURT
04.03.2014 - 04:44
Merhaba, cevabın için saol, ama MYSQL'de tr karakterler gayet düzgün gzüküyor. Json alcığım php'de sanırım sıkıntı.