2014-01-31 3 views
1

Я начинающий программист на Python, конвертирующий скрипт, который запускался на Python 2.7 в Python 3.3. Я исправил кучу проблем (urllib2 и т.д.), и теперь я застрял на этом:BeautifulSoup, Python 3.3: UnicodeEncodeError для конкатенации строк

f.write( soup.findAll(attrs={"class":"topictitle"})[x3].string.strip(' \t\n\r') + ',' + 
             inx + ',' + 
             treadid + ',' + 
             sid + ',' + 
             link2.get('href') 
             + ',' 
             + "http://civicfbthailand.com/forum/" 
             + lnk.encode('utf-8') 
             + '\n' 
            ) 

Который возвращает:

Traceback (most recent call last): 
File "civicforum.py", line 73, in <module> 
    + '\n' 
TypeError: Can't convert 'bytes' object to str implicitly 

Line 73 есть в списке "+" \ п" но я не понимаю, почему эта строка не может быть конкатенирована, или разница в поведении между P27 и P33. Любое просвещение оценили.

ответ

0

просто удалите .encode('utf-8') часть lnk.encode('utf-8') в вашем коде. Метод .encode() используется в Python 2.8, чтобы взломать вокруг того, что python2 строки ASCII, тогда как Python3 строки Юникода, и, таким образом, что вид хака не нужно больше ... И не работает ;-)

f.write( soup.findAll(attrs={"class":"topictitle"})[x3].string.strip(' \t\n\r') + ',' + 
             inx + ',' + 
             treadid + ',' + 
             sid + ',' + 
             link2.get('href') 
             + ',' 
             + "http://civicfbthailand.com/forum/" 
             + lnk 
             + '\n' 
            ) 
Смежные вопросы