12 Kasım 2006

Kodlama Belaları

Ne demişiz 19 Haziran 2006 tarihinde; "Artık biraz daha rahat olduğuma göre daha çok yazabilirim(ve de okuyabilirim)". Halk arasında durumu çok güzel açıklayan atasözlerini bulmak okuyucuya alıştırma olarak bırakılmıştır. :)

Neyse, bugünkü maceralarımız karakter kodlama sorunları ile ilgili. (encoding) Çeşitli yazılımsal sorunlar nedeniyle web sayfalarında " Ð Ý Þ ð ý" olarak gördüğümüz, yani hangi kodlamayla gösterirseniz gösterin "þ ð ý" olmakta ısrar eden yalancı Türkçe karakterlere yuvaya dönüş operasyonu için aşağıdaki ufak PHP kodunu kullanabilirsiniz. Bu kodu yazdığınız dosyayı utf-8 olarak kaydederseniz çıktınız utf-8, iso-8859-9 kaydederseniz de çıktınız iso-8859-9 kodlamasını taşıyacaktır. [[windows-1254 mü? o da ne? düşünmeyin bile, gidin standart bir kodlama kullanın :)]] Eğer çıktıyı bir dosyaya yönlendirmeyecekseniz, uçbirimde görüntüleyebilmeniz için uçbirim programının da bu kodlama seçimine uyumlu olması gerekir:
#! /usr/bin/php -f
<?php
$instring = file_get_contents($_SERVER['argv'][1]);
$search = array( "&thorn;", "&yacute;", "&eth;", "&Yacute;", "&THORN;", "&ETH;","&ouml", "&uuml;", "&Ouml", "&Uuml;", "&ccedil", "&Ccedil", "&quot;", "&lsquo;", "&rsquo;", "&ldquo;", "&rdquo;");
$replace = array( "ş", "ı", "ğ", "İ", "Ş", "Ğ", "ö", "ü", "Ö", "Ü", "ç", "Ç", '"', "'", "'", '"','"');
fwrite(STDOUT, str_replace($search, $replace, $instring ));
?>

Çalışırken neye benziyor peki ?
$ cat debelen.txt
aktar&yacute;m&yacute; a&THORN;a&eth;&Yacute;daki
$ ./tr-htmlentity.php debelen.txt
aktarımı aŞağİdaki


İkinci belamız, Outlook. Evet bizler zaten standartlara uygun özgür yazılımlar kullanıyoruz [[ değil mi ;) ]] ama şu ya da bu sebeple outlook kullanan birilerini tanıyorsanız, lütfen aşağıda anlatacağım ayarları yaptırın onlara.

Sorun şu, programlar e-posta ve haber grubu iletilerinde hangi kodlamanın kullandığını belirtmezse çeşit çeşit sorunlara yol açıyor ve Türkçe karakterler kendiliğinden düzgün görüntülenemeyebiliyor. Örneğin Thunderbird aşağıdaki gibi bir bilgiyi iletinin içine koyuyor, herkes hangi kodlama olduğunu bilebilir;
Content-Type: text/plain; charset=ISO-8859-9; format=flowed

Ancak Outlook ya da Outlook Express programları alakasız başka şeyler koymasına rağmen kodlamayı belirtmiyor.
X-MSMail-Priority: Normal
X-Newsreader: Microsoft Outlook Express 6.00.2900.2869
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.2962
X-RFC2646: Format=Flowed; Response

Outlook kullanan yardımsever arkadaşlarımız iletilerin düzgün kodlama içermesi için gereken ayarı tespit etti [[ Teşekkürler Deniz İpek ve Günhan Gülsoy ]]

araçlar-> seçenekler-> gönder-> haber gönderme biçimi-> düz metin ayarları-> ileti biçimi ekranında yapılması gerekenler:
  • "MIME" seçili
  • "Metni kodlama: Yok"
  • "Başlıkta 8-bit karakterlere izin ver" seçili değil
Resimlerde de görebileceğiniz (İngilizce Türkçe) ayarlar yapıldığında aşağıdaki gibi, olması gereken bilgiler de iletinin içinde yer alıyor.
Content-Type: text/plain;
format=flowed;
charset="UTF-8";
reply-type=response

Bir de çok yerinde bir isme sahip DEMORONISER var, o da çok faydalı, kullanın kullandırın.

2 yorum:

Adsız dedi ki...

outlook denmiş ama outlook express ayarları var orada.. ne ayak? :D

Gökdeniz Karadağ dedi ki...

Bu iki programı da kullanmıyor olduğumu belirtmeme gerek var mı :)