(05-05-2020, Saat: 00:26)pro_imaj Adlı Kullanıcıdan Alıntı: Merhaba,
Aşağıdaki şekilde bir kullanımda Türkçe karakter sorunu yaşıyorum.
var
JSON: TJSonValue;
JSON := TJSonObject.ParseJSONValue(TEncoding.UTF8.GetBytes(strJSON),0);
Result := JSON.ToJSON;
Result := JSON.ToString; yazdığım zaman aslında sorun kalmıyor. (Türkçe sorununu yaşamıyorum) fakat üstteki UTF8 çevrimine rağmen JSON.ToJSON da Türkçe karakter sorunu neden oluşuyor, bu normal mi?
Teşekkürler.
Merhaba...
Yeni bir projemde ben de benzer bir sorun yaşamaya başladım.
Hosting üzerinde bulunan MySQL veritabanındaki tablolara kayıt yaptığım zaman Türkçe karakter sorunu yaşıyorum.
Örnek kodum aşağıda;
StrS:=TStringStream.Create(
//UTF8EncodeToShortString
'{'+'"CusId":"'+Customers.id.ToString+'",'+#13#10+
'"CusName":"'+UTF8EncodeToShortString(Customers.CustomerName)+'",'+#13#10+
'"Phone1":"'+UTF8EncodeToShortString(Customers.PhoneNumber1)+'",'+#13#10+
'"Phone2":"'+UTF8EncodeToShortString(Customers.PhoneNumber2)+'",'+#13#10+
'"Phone3":"'+UTF8EncodeToShortString(Customers.PhoneNumber3)+'",'+#13#10+
'"Adr1":"'+UTF8EncodeToShortString(Customers.Address1)+'",'+#13#10+
'"Adr2":"'+UTF8EncodeToShortString(Customers.Address2)+'",'+#13#10+
'"Adr3":"'+UTF8EncodeToShortString(Customers.Address3)+'",'+#13#10+
'"Discount":"'+Customers.Discount.ToString+'",'+#13#10+
'"CardNo":"'+UTF8EncodeToShortString(Customers.CardNo)+'",'+#13#10+
'"Detail":"'+UTF8EncodeToShortString(Customers.Details)+'"}');
StrS.Position:=0;
try
idHTTP1:=TIdHTTP.Create(nil);
idHTTP1.Request.ContentType := 'application/json';
idHTTP1.Request.ContentEncoding := 'UTF-8';
try
sonuc := idHTTP1.Post(ServerIp+'CustomerSave.php', StrS);
//showmessage(sonuc);
except
on E: Exception do
ShowMessage('Error on request: '#13#10 + e.Message);
end;
Sunucuda bulunan ve gönderdiğim json'u ilgili MySql tabloya yazan CustomerSave.php dosyamın içeriği de şu şekilde;
<?php
header('Content-Type: text/html; charset=utf-8');
include("connect.php");
date_default_timezone_set('Europe/Istanbul');
$json = file_get_contents('php://input');
$data = json_decode($json,true);
$_Id=$data['CusId'];
$_CusName=$data['CusName'];
$_Phone1=$data['Phone1'];
$_Phone2=$data['Phone2'];
$_Phone3=$data['Phone3'];
$_Adr1=$data['Adr1'];
$_Adr2=$data['Adr2'];
$_Adr3=$data['Adr3'];
$_Discount=$data['Discount'];
$_CardNo=$data['CardNo'];
$_Detail=$data['Detail'];
$result = mysql_query("SELECT * from m_customer where PhoneNumber1='$_Phone1' LIMIT 1 ");
$bulunan=0;
while($r=mysql_fetch_array($result))
{
$bulunan++;
}
if ($bulunan==0){
$sql="insert into m_customer
(CustomerName,
PhoneNumber1,
PhoneNumber2,
PhoneNumber3,
Address1,
Address2,
Address3,
Discount,
MemberCardNo,
CustomerDetail)";
$sql.="values
('$_CusName',
'$_Phone1',
'$_Phone2',
'$_Phone3',
'$_Adr1',
'$_Adr2',
'$_Adr3',
'$_Discount',
'$_CardNo',
'$_Detail')";
if (mysql_query($sql)){
echo "OK"; } else { echo "Hata var!"; }
}
else {
$sql="update m_customer set ";
$sql.="CustomerName='$_CusName',
PhoneNumber1='$_Phone1',
PhoneNumber2='$_Phone2',
PhoneNumber3='$_Phone3',
Address1='$_Adr1',
Address2='$_Adr2',
Address3='$_Adr3',
Discount='$_Discount',
MemberCardNo='$_CardNo',
CustomerDetail='$_Detail' where PhoneNumber1='$_Phone1' ";
if (mysql_query($sql)){
echo "Tamamdır"; } else { echo "Hata var!"; }
}
mysql_close($baglanti);
?>
İşin enteresanı bu kodlar kendi PC imde bulunan WampServer kurulu localhost da sorunsuz çalışıyor ve Türkçe karakterler de hem kayıtta hem de listelemede normal geliyor.
Sorun sadece Hosttaki veritabanına kayıtta meydana geliyor.
MySql Veritabanı bağlantısında Character setleri de aşağıdaki şekilde yapıyorum.
mysql_query("SET NAMES 'UTF8'");
mysql_query("SET character_set_connection = 'UTF8'");
mysql_query("SET character_set_client = 'UTF8'");
mysql_query("SET character_set_results = 'UTF8'");
Sizce sorun nerede olabilir ?