Merhaba,
Projede gönül rahatlığı ile kullanılabilecek iki kodlamayı bitirdim. Belki tek karakterli bir dönüş (return) yerine, gerçek bir dizge (string) alarak 'foreach()' ile döngüye sokarsak (belki de broadcast mi yapsak?) veriyi satır satır işlemek daha hızlı olacaktır. Çünkü işleve her gidiş/dönüş sırasında adetler fazlaysa ciddi bir zaman kaybı söz konusu oluyor.
Windows'un CMD karakter seti (CP857) için bir örnek dosya hazırladım. Tam olarak 540 baytlık şiiri şuradan (http://goo.gl/xVEwP) indirip (belki Youtube vidyosunu da dinlemek istersiniz diye içinde adresini de verdim), aşağıdaki kodu deneyebilir ve/veya Windows'un not defterinde bir şeyler yazıp (ANSI olarak kaydedilmeli) 'cp1254den()' işlevini kullanarak dönüştürme yapabilirsiniz.
Başarılar...
/*
convertToUTF.d (21.04.2012)
*/
import std.stdio, std.string;
string cp857den(ubyte çevir) {
string[ubyte] ch = [ 128:"\xc3\x87", 152:"\xc4\xb0", 153:"\xc3\x96",
// Büyük harfler 1 Ç İ Ö
154:"\xc3\x9c", 158:"\xc5\x9e", 166:"\xc4\x9e",
// Büyük harfler 2 Ü Ş Ğ
135:"\xc3\xa7", 141:"\xc4\xb1", 148:"\xc3\xb6",
// Küçük harfler 1 ç ı ö
129:"\xc3\xbc", 159:"\xc5\x9f", 167:"\xc4\x9f",
// Küçük harfler 2 ü ş ğ
131:"\xc3\xa2", 140:"\xc3\xae", 150:"\xc3\xbb",
// Aksanlı harfler 1 â î û
182:"\xc3\x82", 215:"\xc3\x8f", 234:"\xc3\xac",
// Aksanlı harfler 2 Â Î Û
239:"\xc2\xb4", 248:"\xc2\xb0", 253:"\xc2\xb2"];
// İşaretlemeler 1 ´ ° ²
return çevir in ch ? ch[çevir] : format(cast(char)çevir);
}
string cp1254den(ubyte çevir) {
string[ubyte] ch = [ 199:"\xc3\x87", 221:"\xc4\xb0", 214:"\xc3\x96",
// Büyük harfler 1 Ç İ Ö
220:"\xc3\x9c", 222:"\xc5\x9e", 208:"\xc4\x9e",
// Büyük harfler 2 Ü Ş Ğ
231:"\xc3\xa7", 253:"\xc4\xb1", 246:"\xc3\xb6",
// Küçük harfler 1 ç ı ö
252:"\xc3\xbc", 254:"\xc5\x9f", 240:"\xc4\x9f",
// Küçük harfler 2 ü ş ğ
226:"\xc3\xa2", 238:"\xc3\xae", 251:"\xc3\xbb",
// Aksanlı harfler 1 â î û
194:"\xc3\x82", 206:"\xc3\x8f", 219:"\xc3\xac",
// Aksanlı harfler 2 Â Î Û
180:"\xc2\xb4", 176:"\xc2\xb0", 178:"\xc2\xb2"];
// İşaretlemeler 1 ´ ° ²
return çevir in ch ? ch[çevir] : format(cast(char)çevir);
}
void main() {
File dosya = File("olayUfku.txt", "r");
// CP857 kodlu dosya: http://goo.gl/xVEwP (540 byte)
while (!dosya.eof()) {
string satır = dosya.readln();
foreach (c; satır) write(cp857den(c));
}
}/* ÇIKTISI:
Microsoft Windows [Srm 6.1.7601]
Telif Hakk (c) 2009 Microsoft Corporation. Tm haklar sakldr.
C:\Users\Netbook>chcp 65001
Etkin kod sayfası: 65001
C:\Users\Netbook>type olayUfku.txt
D�n�lmez ak�am�n ufkunday�z, vakit �ok ge�
Bu son fas�ld�r ey �mr�m, nas�l ge�ersen ge�
Cih�na bir daha gelmek hay�l edilse bile
Avunmak istemeyiz b�yle bir teselliyle
Geni� kanatlar� bo�lukta simsiyah a��lan
Ve arkas�nda g�ne� do�mayan b�y�k kap�dan
Ge�ince ba�layacak, bitmeyen s�k�nlu gece
Gur�ba kar�� bu son bah�elerde keyfince
Ya a�k i�inde har�b ol, ya �evk i�inde g�n�l
Ya l�le a�mal�d�r g��s�m�zde, yahut g�l
G�fte: Yahy� Kem�l BEYATLI
Beste: M�nir N�rettin SEL�UK
Makam: Seg�h
Adres: http://youtu.be/lErDTBRZn3Y
C:\Users\Netbook>convertToUTF
Dönülmez akşamın ufkundayız, vakit çok geç
Bu son fasıldır ey ömrüm, nasıl geçersen geç
Cihâna bir daha gelmek hayâl edilse bile
Avunmak istemeyiz böyle bir teselliyle
Geniş kanatları boşlukta simsiyah açılan
Ve arkasında güneş doğmayan büyük kapıdan
Geçince başlayacak, bitmeyen sükûnlu gece
Gurûba karşı bu son bahçelerde keyfince
Ya aşk içinde harâb ol, ya şevk içinde gönül
Ya lâle açmalıdır göğsümüzde, yahut gül
Güfte: Yahyâ Kemâl BEYATLI
Beste: Münir Nûrettin SELÇUK
Makam: Segâh
Adres: http://youtu.be/lErDTBRZn3Y
*/
--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]