2011-02-25 3 views
2

웹 사이트에서 데이터를 긁어내어 파일에있는 데이터를 쓰려고했습니다. 시간의 90 % 이상, 유니 코드 오류가 발생하지 않지만 데이터에 "Burger King®, Hans Café"와 같은 문자가있는 경우 오류 처리가 인쇄되도록 파일에 기록하는 것이 좋지 않습니다. 그것은 더 이상 오류없이 화면에 표시됩니다.일부 문자 (상표 기호 등)는 파일에 쓸 수 없지만 화면에 인쇄 할 수 있습니다.

나는 encode 및 decode 기능과 다양한 인코딩을 시도했지만 아무 소용이 없습니다.

것은 내가 아래 작성한 현재 코드의 발췌를 찾아주세요 :

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 

f=codecs.open('alldetails7.txt', mode='w', encoding='utf-8', errors='replace') 
... 


soup5 = BeautifulSoup(html5) 
enc_s5 = soup5.originalEncoding 

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 + tag.text.replace(u',',u';') 
      if count_detail < 4 : 
       stream=stream+"," 
     count_detail = count_detail + 1 
    stream.strip() 
    try: 
     f.write(str(stnum)+","+br_name_addr+","+stream.decode(enc_s5)+os.linesep) 
    except: 
     print "Unicode error ->"+str(storenum)+","+branch_name_address+","+stream 
+0

...해야한다 유능한. 스트림에서'decode()'를 호출합니다. 즉,'stream'이'enc_s5'에서 인코딩 된 비 유니 코드 문자열이 될 것으로 예상합니다 .- 정말로 사실입니까? 어쩌면 이미 유니 코드입니까? –

답변

0

귀하의 f.write() 라인은 나에게 이해가되지 않습니다 - 당신이 streamdecode를 호출해서는 안 stream, 그것은 tag.textBeautifulSoup gives you Unicode에서에서 간접적으로 이루어집니다 이후 unicode 될 것입니다. (decode을 사용하면 특정 문자 인코딩을 사용하는 strunicode으로 바꿀 수 있습니다. codecs.open()으로 파일을 연 다음 UTF-8을 사용하도록 지정 했으므로 일 수 있습니다. 그래서 대신 내가 시도 할 것입니다 : 대신 당신이 f=open('alldetails7.txt','w')으로 파일을 열 단지했다고 가정하면,

f.write(unicode(stnum)+br_name_addr+u","+stream+os.linesep) 

을 ... 나, 당신이 할 것 :

실제 예외 메시지 기능
line = unicode(stnum)+br_name_addr+u","+stream+os.linesep 
f.write(line.encode('utf-8')) 
+0

감사합니다. 당신의 대답은 유니 코드와 관련하여 나에게 어떤 의미를 두 드렸습니다. 이 물건은 나를 죽이고 당신의 의견은 내가 필요로했던 것을 이끌었다. – Glenn

0

당신은 당신이 작성하는 파일의 인코딩을 확인하고 문자가에 표시 할 수 있습니다 확인했다 되세요 파일에 쓰려고하는 인코딩? 문자 인코딩을 UTF-8 또는 명시 적으로 문자를 표시하도록 명시 적으로 설정하십시오.

+0

입력을 주셔서 감사합니다 ... 이것은 내가 라틴어 -1이 필요한 특정 인코딩을 찾도록 유도했습니다. – Glenn

관련 문제