2011-02-23 71 views
2

我一直在尋找解決方案來解決一個我有但是沒有找到/理解的解決方案。基本上,如果我使用字符串函數(translate,strip等),我會得到Unicode錯誤(ascii'編解碼器不能在位置y編碼字符'x':序號不在範圍內(128)。但是當我嘗試美麗的湯處理文本,我不明白Unicode的錯誤,但難易程度(我應該說,不熟悉)是相當高的,我下面的代碼摘錄我:Python字符串處理,統一代碼和美麗的湯

...

import urllib2,sys 
import re 
import os 
import urllib 
import string 
import time 
from BeautifulSoup import BeautifulSoup,NavigableString, SoupStrainer 
from string import maketrans 
import codecs 

trantab=string.maketrans(",",";") 
... 

       html5 = urllib2.urlopen(address5).read() 
       time.sleep(1.5) 

       soup5 = BeautifulSoup(html5) 

       for company in iter(soup5.findAll(height="20px")): 
        stream = "" 
        count_detail = 1 
        for tag in iter(company.findAll('td')): 
         if count_detail > 1: 
          stream = stream + string.translate(str(tag.text),trantab) 
          if count_detail < 4 : 
           stream=stream+"," 
         count_detail = count_detail + 1 
        print str(storenum)+","+branch_name_address+","+ stream 

....

該腳本運行一段時間,然後在stream = stream + string.translate(str(tag.text),trantab)

炸彈0

基本上,我只是試圖在我正在處理的字段中用分號替換逗號。

此外,試圖刪除使用string.strip嵌入的空白/空白,但我得到類似的錯誤。

如何使用美麗的湯做同樣的事情(只要用分號替換逗號並刪除空格)?

或者如果我只是堅持字符串函數,是否有代碼來解決這些麻煩的Unicode錯誤?

回答

5

您正在將str對象與unicode對象混合,這導致Python解釋器將一個對象強制爲另一個對象。字符串/ Unicode強制轉換需要一種編碼,默認情況下該編碼爲ascii。當這個假設不成立時,你會得到這種錯誤。

的一般解決方案是不混合strunicode:使用unicode到處可能的,並且使用顯式和string.encode('utf8', 'strict')unicode_string.decode('utf8', 'strict')(UTF-8是一個例子)的任何轉換。

在這種情況下,替換

stream = stream + string.translate(str(tag.text),trantab) 

stream = stream + tag.text.replace(u',', u';')