Skip to main content
 首页 » 编程设计

python之统一码编码错误 : 'ascii' codec can't encode character '\xf1' in position 61: ordinal not in range(128)

2025年05月04日9bluestorm

我在 Python 中调用 google adwords api,然后我将该数据记录到 CSV 文件中,我正在处理 UnicodeDecode/EncodeError,我已经尝试了所有方法来理解它,但现在无济于事。

with open('adgroups.csv', 'w', newline='') as csvfile: 
    campaign_name = seed_keyword.title().encode('utf-8','ignore').decode() 
    kw_writer = csv.writer(csvfile, delimiter=',', quotechar='"', quoting=csv.QUOTE_MINIMAL) 
    kw_writer.writerow( 
        ["CAMPAIGN", "ADGROUP", "MAX BID", "KEYWORD", "MATCH TYPE", "AVERAGE CPC", "SEARCH VOLUME", "COMPETITION"]) 
    for ad_group in ad_group_list: 
        ad_group_name = ad_group['keyword'].title().encode('utf-8','ignore').decode() 
        try: 
            for keyword_data in ad_group['keyword_data_list']: 
                kw_writer.writerow( 
                    [campaign_name, ad_group_name, str(ad_group['rpc'] * 0.5).encode('utf-8','ignore').decode(), keyword_data['kw'].encode('utf-8','ignore').decode(), "BROAD", 
                     str(keyword_data['cpc']).encode('utf-8','ignore').decode(), 
                     str(keyword_data['search_volume']).encode('utf-8','ignore').decode(), str(keyword_data['competition']).encode('utf-8','ignore').decode()]) 
                kw_writer.writerow( 
                    [campaign_name, ad_group_name, str(ad_group['rpc'] * 0.5).encode('utf-8','ignore').decode(), keyword_data['kw'].encode('utf-8','ignore').decode(), "PHRASE", 
                     "", 
                     "", ""]) 
                kw_writer.writerow( 
                    [campaign_name, ad_group_name, str(ad_group['rpc'] * 0.5).encode('utf-8','ignore').decode(), keyword_data['kw'].encode('utf-8','ignore').decode(), "EXACT", 
                     "", 
                     "", ""]) 
        except UnicodeError as e: 
            print(e) 
            print(str(ad_group)) 
            raise 
 
File "/var/www/html/ARB-Automation/MultiProcessController.py", line 158, in perform_automation 
CSVCampaignSetup.get_in_kw_and_make_adgroups(seed_keyword, ad_group_bid_mapping, cluster_bid_dict) 
File "/var/www/html/ARB-Automation/CSVCampaignSetup.py", line 163, in get_in_kw_and_make_adgroups 
make_single_adgroup_csv(best_ad_group_data) 
File "/var/www/html/ARB-Automation/CSVCampaignSetup.py", line 222, in make_single_adgroup_csv 
str(keyword_data['search_volume']).encode('utf-8','ignore').decode(), str(keyword_data['competition']).encode('utf-8','ignore').decode()]) 

UnicodeEncodeError: 'ascii' 编解码器无法对位置 61 中的字符 '\xf1' 进行编码:序号不在范围内 (128)

  1. 当我提到“忽略”时,为什么首先会出现错误?
  2. 如何正确处理?

奇怪的事情 - 堆栈跟踪记录第 222 行的错误,这是一个“编码”错误,据我所知,它试图创建 unicode 字符串的字节表示。 第 222 行需要编码的数据是一个数字——int 或 float!这怎么找不到 127 位以下的表示 - 因此出现“ascii”编码问题?

此外,我想到了一个解决方案 - 如果我使用 encode('ascii','ignore') 而不是 encode('utf-8','ignore'),它不应该解决问题吗?问题仍然是这是否是理想的解决方案?

我什至打印了原始数据,并在解释器中一步步运行这段代码,然后我没有收到任何错误。 请帮助我。

请您参考如下方法:

请将 python 源文件名的(路径)非英文字符(在本例中为 ñ)更改为英文字符 [a-z0-9] 和有效的操作系统文件名字符。 我使用 pyscripter,但遇到了类似的问题。