SORU
29 Ocak 2009, PERŞEMBE


Unicode (utf8) okuma ve python dosyaya yazma

Okuma ve anlama dosyası (Python 2.4) için metin yazma, bazı beyin arızası yaşıyorum.

# the string, which has an a-acute in it.
ss = u'Capit\xe1n'
ss8 = ss.encode('utf8')
repr(ss), repr(ss8)

("'Capit\xe1n", "'\xc3\xa1n yapılacak sermaye yatırımı")'.' u

print ss, ss8    
print >> open('f1','w'), ss8

>>> file('f1').read() 
'Capit\xc3\xa1n\n'

Ben yazın 8* *f2 dosya benim favori editörü içine, o kadar.

sonra:

>>> open('f1').read()
'Capit\xc3\xa1n\n'
>>> open('f2').read()
'Capit\\xc3\\xa1n\n'
>>> open('f1').read().decode('utf8')
u'Capit\xe1n\n'
>>> open('f2').read().decode('utf8')
u'Capit\\xc3\\xa1n\n'

Ben burada anlayış ne? Açıkça özlüyorum bu büyü bazı önemli bit (veya iyi anlamda) var. Metne bir tür ne uygun bir dönüşüm elde etmek için dosyaları.

EditGerçekten grok başarısız olduğum şey ise aslında dışarıdan geldiğinde onu tanımak için Python olsun, eğer sen-ebilmek değil UTF-8 temsil ne anlamı var burada. Belki de sadece JSON dize dökümü, ve bu asciiable bir temsili yana kullanın! Daha da önemlisi, bir Python dosyasından geliyor zaman tanımak ve çözmek, bu unicode nesne bir ascıı gösterimi var mı? Eğer öyleyse, bunu nasıl alabilirim?

>>> print simplejson.dumps(ss)
'"Capit\u00e1n"'
>>> print >> file('f3','w'), simplejson.dumps(ss)
>>> simplejson.load(open('f3'))
u'Capit\xe1n'

CEVAP
10 Mayıs 2009, Pazar


Kodlama, kod çözme yöntemleri uğraşmak yerine daha kolay kodlayıcılar arası açıktır yöntemi modülü bulmak için kullanabilirsiniz.

>>>import codecs
>>>f = codecs.open("test", "r", "utf-8")

O zaman f okuma çağrıldıktan sonra() işlevi, unicode kodlanmış bir nesne döndürülür.

>>>f.read()
u'Capit\xe1l\n\n'

Eğer bir dosya kodlama biliyorsanız, kodlayıcılar paketi kullanarak çok daha az kafa karıştırıcı olacak.

http://docs.python.org/library/codecs.html#codecs.open bkz

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Edgar flores

    Edgar flores

    7 HAZİRAN 2006
  • geraldnonadoez

    geraldnonado

    3 Temmuz 2013
  • infodirt

    infodirt

    11 Mart 2009