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

  • Lancome USA

    Lancome USA

    30 HAZİRAN 2009
  • Kanál používateľa McsFuego

    Kanál použ

    12 EKİM 2011
  • TechnoBuffalo

    TechnoBuffal

    8 HAZİRAN 2007