SORU
30 Mart 2012, Cuma


UnicodeEncodeError: 'ascıı' Kodek't kodlamak karakter u'\xa0' pozisyon 20: sıra not in range(128)

Sorunları metin farklı web sayfası getirilen unicode karakterleri ile ilgili (farklı sitelerde) geçiriyorum. BeautifulSoup kullanıyorum.

Sorun hata bazen bazı sayfalar ile çalışır o her zaman reproducable değil, ve bazen, bir UnicodeEncodeError atarak barfs. Aklıma gelebilecek her şeyi denedim ama sürekli olarak Unicode ile ilgili bir hata falan atma olmadan çalışan bir şey bulamadım.

Soruna neden olan kod bölümlerden biri hown aşağıda:

agent_telno = agent.find('div', 'agent_contact_number')
agent_telno = '' if agent_telno is None else agent_telno.contents[0]
p.agent_info = str(agent_contact   ' '   agent_telno).strip()

Burada yığın izleme parçacığı yukarıdaki çalıştırdığınızda BAZI dizeleri üretti

Traceback (most recent call last):
  File "foobar.py", line 792, in <module>
    p.agent_info = str(agent_contact   ' '   agent_telno).strip()
UnicodeEncodeError: 'ascii' codec can't encode character u'\xa0' in position 20: ordinal not in range(128)

Bu bazı sayfalar (veya daha fazla özel sitelerin bazı sayfaları) Diğerleri unencoded olabilir iken kodlanmış olabileceğinden şüpheleniyoruz. Tüm siteler içselleştirme sorunları ile ilgili metin dışında bir İngilizce ile yazılmış ile ilgili yok yani İNGİLTERE merkezli ve veri İNGİLTERE tüketimi amaçlı sağlamak.

Herkes CONSİTENTLY bu sorunu düzeltebilirim bunu çözmek için fikri olan var mı?

CEVAP
30 Mart 2012, Cuma


Python Unicode HOWTO okumak gerekir. Bu hata very first example.

Temelde, str kodlanmış metin / bayt unicode dönüştürmek için kullanmayı bırakın.

Bunun yerine, düzgün .encode() dize kodlamak için kullanın:

p.agent_info = u' '.join((agent_contact, agent_telno)).encode('utf-8').strip()

veya unicode tamamen iş.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Howard Pinsky

    Howard Pinsk

    6 AĞUSTOS 2006
  • SuperPrincessjo

    SuperPrinces

    1 EKİM 2010
  • Trevor Eckhart

    Trevor Eckha

    19 Aralık 2009