Skip to main content
 首页 » 编程设计

python之某些字符(商标符号等)无法写入文件但可在屏幕上打印

2025年05月04日7webabcd

我一直在尝试从网站上抓取数据并将找到的数据写入文件。超过 90% 的时间,我不会遇到 Unicode 错误,但是当数据具有以下字符(例如“Burger King®, Hans Café”)时,它不喜欢将其写入文件,因此我的错误处理打印出来它按原样显示在屏幕上,没有任何进一步的错误。

我尝试了编码和解码函数以及各种编码,但都无济于事。

请在下面找到我编写的当前代码的摘录:

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 

请您参考如下方法:

你的 f.write()行对我来说没有意义 - stream将是 unicode因为它是从 tag.text 间接制作的和 BeautifulSoup gives you Unicode , 所以你不应该调用 decode在 stream . (您使用 decode 将具有特定字符编码的 str 转换为 unicode 。)您已经使用 codecs.open() 打开文件进行写入。并告诉它使用 UTF-8,这样你就可以 write()一个unicode这应该有效。所以,我会尝试:

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

... 或者,假设您刚刚用 f=open('alldetails7.txt','w') 打开文件,你会这样做:

line = unicode(stnum)+br_name_addr+u","+stream+os.linesep 
f.write(line.encode('utf-8'))