2016-03-25 42 views
1

İki girdisi olan PyQt4 ile bir Python 2 GUI uygulaması yaptım. İlk dosya adını alır ve ikincisi dosyayı yazacak metni alır.Arapça metni PyQt4'ten UTF-8'e dönüştürme

Ben her ikisinde de Arapça metin girmek istiyorum, bu yüzden bu fonksiyonu yazdım:

def makefile(self): 
    self.name_file=str(self.lineEdit.text()).decode("utf-8") 
    self.string=str(self.lineEdit_2.text()).decode("utf-8") 
    file=open(self.name_file,"w") 
    file.write(self.string) 
    file.close() 

iyi çalışıyor ben İngilizce harfler girdiğinizde, ama Arapça girerken aşağıdaki hatayı alıyorum:

UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-2: ordinal not in range(128)

+0

yazmalıyım? Python'un hangi sürümünü kullanıyorsunuz? Umarım 3 ama tüm dizeleri varsayılan olarak unicode olduğunu düşündüğünüzden emin değilim yani – konkked

+0

'str (self.lineEdit.text()) .değiştir (" utf-8 ")' yanlış görünüyor. str() 'normalde hata ayıklama amacıyla bir şeyi temsil etmek için tasarlanmıştır. Ayrıca, zaten bir dize ise, neden onu çözmeniz gerekiyor? – syntonym

cevap

1

Unicode'unuzdan UTF-8'e dönüştürmek için kod yazmak yerine, UTF-8'den unicode'a dönüştürmek için kod yazdınız. Hatalar alıyorsun.

decode("utf-8")encode("utf-8") UTF-8 olarak metin kodlamak için çalışıyoruz gibi UTF-daki dosyaya yazabilir, böylece görünüyor

take a unicode string and encode into a binary str using UTF-8.

demektir Tersine

Take a UTF-8 encoded binary str and convert to a unicode string.

demektir 8 kodlama. Yani decode() yerine encode() kullanmalısınız.

Ayrıca, Unicode'da olan ve str() numarasını çağıran QString değerini alıyorsunuz. Bu, Arapça metniniz için çalışmayan ASCII'yi kullanarak bir ikili str değiştirmeye çalışır ve gördüğünüz istisnalara neden olur. Ve yapmak istediğin şey bu değildi, UTC-8'i değil, ASCII'yi kullanmak istedin. Yani bir str ikili dönüştürme, unicode() ile unicode nesnesine dönüştürmeyin. Eğer `self.lineEdit` başlatılıyor nerede

Yani, yerine

str(self.lineEdit_2.text()).decode("utf-8") 

örneğin yerine

unicode(self.lineEdit_2.text()).encode("utf-8") 
+0

Ben söylediklerinizi yapmaya çalıştım ama str() 'işlevi olmadan yaptığımda aşağıdaki hatayı aldım: AttributeError: 'QString' nesnesinin 'encode' özelliği yok – FRe34

+0

@ FRe34 Ah OK Ardından, "str" ​​yerine "unicode()" işlevidir. Cevabımı düzenlerim. –

+0

teşekkürler dostum iyi çalışıyor: D – FRe34